2009-12-23 59 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