我有一个数组,其中包含来自另一个数组的特定值的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]]
,但根本没有效率。
答案 0 :(得分:3)
你可以尝试
$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)
答案 1 :(得分:2)
循环可以解决您的问题:
$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);
答案 2 :(得分:1)
嗨,乔纳森,你最后错过了一个支架 试试这个“$ 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]];
?>