2014-09-10 62 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); 
}