2009-12-23 79 views
1

我有一個PHP數組像這樣(沒有語法)數組元素:PHP:使用某些關鍵

array 
(
    ['one'] => array (
         ['wantedkey'] => 5 
         ['otherkey1'] => 6 
         ['otherkey2'] => 7 
        ) 
    ['two'] => => array (
         ['otherkey1'] => 5 
         ['otherkey2'] => 6 
         ['wantedkey'] => 7 
        ) 
    ['three'] => => array (
         ['otherkey1'] => 5 
         ['wantedkey'] => 6 
         ['otherkey2'] => 7 
        ) 
) 

什麼是打印值只與'wantedkey'一個關鍵要素的最佳方式,如果我例如使用array_walk_recursive

謝謝!

回答

5

會不會有這樣的工作?

function test_print($item, $key) { 
    if ($key === 'wantedkey') { 
    print $item; 
    } 
} 

array_walk_recursive($myarray, 'test_print'); 

或者我錯過了你的需求中的東西? [我想我是]

,所以我可以處理你在找什麼會是這樣的東西的最佳方式:

function inner_walk ($item, $key) { 
    if ($key === 'wantedkey2') { 
    print $item; 
    } 
} 

function outer_walk ($item, $key) { 
    if (($key === 'wantedkey1') && (is_array($item)) { 
    array_walk($item,'inner_walk'); 
    } 
} 

array_walk($myarray,'outer_walk'); 

array_walk_recursive的問題是,它實際上並沒有告訴你在哪裏你在陣列中。理論上你可以將類似於array_walk_recursive的東西應用到上面,但由於您只提供了一個二維數組,因此使用array_walk應該可以很好地工作。

+0

道歉,我忘了提,如果我要檢查,如果鍵是在多維的方式是相同的: '$項目[「wantedkey1」] [「wantedkey2」]' 如何確保兩個鑰匙都存在? – ash 2009-12-23 18:52:36

0

我也可能在這裏找點兒東西,但爲什麼不直接對他們說謊呢?

foreach($myarray as $subarray) { 
    echo $subarray['wantedkey']; 
} 

並不直接回答你原來的問題,因爲它沒有使用array_walk_recursive,但它似乎給你更低的複雜問什麼。我誤解了嗎?

+0

這樣做的唯一缺點是,如果'$ subarray'不包含'wantedkey',那麼你會拋出異常。 – Kitson 2009-12-23 13:52:07