【问题标题】:PHP: Array elements with a certain key [duplicate]PHP:具有特定键的数组元素
【发布时间】:2010-12-29 10:05:14
【问题描述】:

我有一个这样的 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
                     )
)

例如,如果我使用的是 array_walk_recursive,那么仅打印键为 'wantedkey' 的元素的值的最佳方法是什么?

谢谢!

【问题讨论】:

    标签: php recursion multidimensional-array


    【解决方案1】:

    这样的东西不可行吗?

    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 应该可以正常工作。

    【讨论】:

    • 抱歉,我忘了说,如果我想以多维方式检查密钥是否相同怎么办:$item['wantedkey1']['wantedkey2']我如何确保两个密钥都存在?
    【解决方案2】:

    我也可能在这里遗漏了一些东西,但为什么不直接遍历它们呢?

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

    由于它不使用array_walk_recursive,因此无法直接回答您的原始问题,但它似乎可以以较低的复杂性满足您的要求。我是不是误会了?

    【讨论】:

    • 唯一的缺点是如果$subarray 不包含'wantedkey',你会抛出异常。
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多