我有以下数组:
$array = array('23' => array('19' => array('7' => array('id' => 7, 'name' => 'John Doe'))));
Array
(
[23] => Array
(
[19] => Array
(
[7] => Array
(
[id] => 7
[name] => John Doe
)
)
)
)
我想访问子元素,我知道他的子键23 19 7
。我可以用简单的格式
echo $array['23']['19']['7']['name']; // John Doe
但这些阵列只有3级,这可能会有所不同,或多或少。我必须创建一个数组unlimited level
。
我尝试使用以下代码:
$keys = array('23', '19', '7');
echo $array[$keys]['name'];
当然我遇到Warning: Illegal offset type in
错误。
然后我尝试了这个,但我无法获得任何元素:
function brackets($str) {
return sprintf("['%s']", $str);
}
$keys = array('23', '19', '7');
$string_key = implode('', array_map('brackets', $keys)); // ['23']['19']['7']
echo $array{$string_key}['name'];
答案 0 :(得分:1)
您可以创建一个可以使用键阵列调用的函数。
function getArrayPathVal($arr, $path){
if(!is_array($path))
return $arr[$path];
$curr = $arr;
foreach($path as $key)
{
if(!$curr[$key])
return false;
$curr = $curr[$key];
}
return $curr;
}
$array = array('23' => array('19' => array('7' => array('id' => 7, 'name' => 'John Doe'))));
$keys = array('23', '19', '7');
$res = getArrayPathVal($array, $keys);
print $res['name']; //Prints 'John Doe'
答案 1 :(得分:1)
您可以尝试递归函数:
function getByKeys ($arr, $keys) {
if (count($keys) == 0)
return $arr;
$key = array_shift ($keys);
return getByKeys ($arr[$key], $keys);
}
$array = array('23' => array('19' => array('7' => array('id' => 7, 'name' => 'John Doe'))));
echo getByKeys ($array, array('23', '19', '7'));
这是未经测试的,但这个概念应该可以解决问题: