2014-09-10 30 views
0

举例来说,如果我有这个数组:使用数组键访问多维数组?

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

有什么办法来访问它是这样的:

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

我知道我可以写这篇文章,但我很好奇,如果像它已经存在于PHP中。

+0

不,不是一个单发功能。但确实是一个简短的递归的书写。 – Wrikken 2014-09-10 21:53:45

+1

我真的不知道如何使用这个函数比使用括号表示('$ my_array ['a'] ['b']')更好。 – raina77ow 2014-09-10 21:54:46

+0

@ raina77ow:我假设因为这不是真正的代码,而是由另一个进程提供的一组键。但是,如果OP确实打算按原样使用它,那么你有一个好点。 – Wrikken 2014-09-10 21:55:56

回答

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

或者,把它缩短:电池_不包括)) – georg 2014-09-10 22:20:44

+0

我不想重新发明轮子,所以我想我会检查它是否存在。毕竟,访问深层愚蠢的嵌套数组感觉像我使用PHP时所做的90%。 :P – Joren 2014-09-11 02:03:58

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); 
}