使用数组键来访问多维数组?

时间:2014-09-10 21:51:18

标签: php

例如,如果我有这个数组:

$my_array = array('a' => array('b' => 'c'));

有没有办法像这样访问它:

$my_value = access_array($my_array, array('a', 'b'));
// $my_value == 'c'

我知道我可以写这个,但我很好奇PHP中是否存在类似的东西。

2 个答案:

答案 0 :(得分:1)

一种可能的(递归)方法:

function access_array(array $target, array $keys) {
   $target = $target[ array_shift($keys) ];
   return $keys ? access_array($target, $keys) : $target;
}

另一种可能的(迭代)方法:

function access_array(array $target, array $keys) {
   foreach ($keys as $k) {
     $target = $target[$k];
   }
   return $target; 
}

P.S。我不能说它比@MarkB did更好:

  

PHP是一个工具箱。它包含螺丝刀,锤子,也许是一个测量   磁带和一支铅笔。你期望它包含一个完全开发的   房子,尽可能配有管道和电线   你想要它做的事情。而不是四处寻找罐头   开幕式,将烹饪你的感恩节晚餐,并帮助你的孩子   进入大学,你应该学习如何使用PHP的基本工具   提供构建一体化工具。

答案 1 :(得分:1)

function get_nested_key_val($ary, $keys) {
    foreach($keys as $key)
        $ary = $ary[$key];
    return $ary;
}

$my_array = array('a' => array('b' => 'c'));
print get_nested_key_val($my_array, array('a', 'b'));

对于函数式编程支持者

function get_nested_key_val($ary, $keys) {
    return array_reduce($keys, function($a, $k) { return $a[$k]; }, $ary);
}