数组包含键和关联数组,如何建立关系


Array containing keys and associative array, how to make a relation

我有一个数组,其中包含path到另一个数组的特定值,为了更清楚一点,这里有一个例子。

包含键的数组我将其命名为$params

Array
(
    [0] => paths
    [1] => assets
    [2] => js
)

这是我的关联数组命名为$config

Array
(
    [paths] => Array
        (
            [assets] => Array
                (
                    [js] => /assets/js
                    [css] => /assets/css
                )
        )
    [library] => Array
        (
            [js] => jQuery
        )
)

那么我如何使用数组1访问数组2中的值呢?

我试过$config[$params[0]][$params[1]][$params[2]],但它一点效率都没有。

你可以试试

$path = array(
        0 => 'paths',
        1 => 'assets',
        2 => 'js',
);

$data = array(
  'paths' => array(
    'assets' => array(
      'js' => '/assets/js',
      'css' => '/assets/css',
    ),
  ),
  'library' => array(
    'js' => 'jQuery',
  ),
);

$temp = $data;
foreach($path as $key) {
    $temp = $temp[$key];
}
var_dump($temp);

输出
string '/assets/js' (length=10)

一个循环可以解决你的问题:

$c = $config;
foreach($params as $path) {
  if(!array_key_exists($path, $c)) {
    $c = null;
    break;
  }
  $c = $c[$path];
}

这将遍历$params中的每个条目,然后访问$config数组的子键。找到它后,$c将包含当前子数组。最后,$c将包含您正在寻找的值(如果路径无效或未找到,则NULL)。

同样可以使用array_reduce函数以函数的方式完成:

$path = array_reduce(function($current, $path) {
  if($current == NULL || !array_key_exists($path, $current))
    return NULL;
  return $current[$path];
}, $params, $config);

你好,Jonathan,你最后漏了一个大括号试试这个" $ config ($ params [0]] [$ params [1]] [$ params[2]]"。会成功的我张贴了一个代码,这对我来说很好

<?php
$params = array(0 => 'paths',1 => 'assets',2 => 'js');
echo '<pre>';print_r($params);
$config = array
(
    'paths' => array
        (
            'assets' => array
                (
                    'js' => '/assets/js',
                    'css' => '/assets/css'
                )
        ),
    'library' => array
        (
            'js' => 'jQuery'
        )
);
echo '<pre>';print_r($config);
echo $config[$params[0]][$params[1]][$params[2]];
 ?>