Php 如何使用密钥从多维数组中检索深层子数组?

Php 如何使用密钥从多维数组中检索深层子数组?,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我有下面的数组,并试图从$array变量中获取名为“Summary”的键的值 ["Rows"]=> array(1) { ["Row"]=> array(1) { [0]=> array(1) { ["Rows"]=> array(1) { ["Row"]=> array(1) { [0]=> array(1) { [

我有下面的数组,并试图从
$array
变量中获取名为“Summary”的键的值

["Rows"]=>
array(1) {
  ["Row"]=>
  array(1) {
    [0]=>
    array(1) {
      ["Rows"]=>
      array(1) {
        ["Row"]=>
        array(1) {
          [0]=>
          array(1) {
            ["Rows"]=>
            array(1) {
              ["Row"]=>
              array(1) {
                [0]=>
                array(1) {
                  ["Summary"]=>
                  array(1) {
                    ["ColData"]=>
                    array(2) {
                      [0]=>
                      array(1) {
                        ["value"]=>
                        string(19) "Some Value"
                      }
                      [1]=>
                      array(1) {
                        ["value"]=>
                        string(7) "2001.00"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
我试着跟着

array_map(function ($ar) {return $ar['Summary'];}, $array);
但是没有成功


我做错了什么?

这里有三个选项:

function searchArray($needle, $haystack, &$matched = null)
{
    if (is_array($haystack) && count($haystack) > 0) {
        foreach ($haystack as $key => $value) {
            if ((string)$key === (string)$needle) {
                if (is_array($value)) {
                    $matched = $value;
                } else {
                    $matched[] = $value;
                }
            } else {
                if (is_array($value) && count($value) > 0) {
                    self::searchArray($needle, $value, $matched);
                }
            }
        }
    }   
    return true;
} 
searchArray('Summary', $yourArray, $found);
var_dump($found);
()

您可以使用如下简单的递归函数:

代码#1:

或者,您可以直接访问所需的子阵列,而无需使用任何函数调用。您只需要命名每个键(假设结构是静态的)

代码#2:

要利用关于数组结构的假设,可以实现一个递归过程,该过程在每次迭代中“跳跃”级别:

代码#3:

输出(来自上述任何方法):


array\u map
不会比第一层更深,这是肯定的all@u_mulder编辑了这个问题。请帮助。我建议使用
array\u walk\u recursive
,如果我有时间,我会给你一个片段,但是检查@scosu
array\u walk\u recursive()
只会迭代数组的“叶节点”,在这种情况下不起作用。@在找到摘要之前可能有动态行。
function recursive($array){
    if(key($array)!=='Summary'){
        return recursive(current($array));
    }
    return current($array);
} 
var_export(recursive($array));
$array=[
    'Rows'=>[
        'Row'=>[
            [
                'Rows'=>[
                    'Row'=>[
                        [
                            'Rows'=>[
                                'Row'=>[
                                    [
                                        'Summary'=>[
                                            'ColData'=>[
                                                ['value'=>'Some Value'],
                                                ['value'=>'2001.00']
                                            ]
                                        ]
                                    ]
                                ]
                            ]
                        ]
                    ]
                ]
            ]
        ]
    ]
];
var_export($array['Rows']['Row'][0]['Rows']['Row'][0]['Rows']['Row'][0]['Summary']);
function recursive_jumper($array){
    if(key($array)!=='Summary'){
        return recursive_jumper($array['Rows']['Row'][0]);
    }
    return current($array);
} 
var_export(recursive_jumper($array));
array (
  'ColData' => 
  array (
    0 => 
    array (
      'value' => 'Some Value',
    ),
    1 => 
    array (
      'value' => '2001.00',
    ),
  ),
)