我有一个数组,其中包含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]];
?>