array_column 不适用于嵌套数组中的第一个键

array_column doesn't work with first key in nested array

我有一个像这样的嵌套数组

$array = array(
  [2] => array(
      [5] => array(
          [7] => array(
               [46] => array()
          )
      ),
      [108] => array()
  ), 
  [14] => array(),
  [8] => array(
      [72] => array()
  )
)

只知道密钥,我需要在数组中找到它并获取它的所有嵌套数据。使用 array_column 仅当我从二级密钥

开始时才有效
$foo = array_column($array, 2) // returns empty array
$bar = array_column($array, 5) // returns all its nested data

这是为什么,在不知道级别的情况下使用任意键执行此操作的正确方法是什么

这是一个递归函数,它在每个点检查键是否与所需的键匹配,如果是,它 return 是值,如果不是,它将查找也是数组的元素(这是在哪里递归位进来)和 return 如果在那里找到匹配...

function nested_array_key_search ( array $array, $key ) {
    foreach ( $array as $elementKey => $element )  {
        if ( $elementKey === $key ) {
            return $element;
        }
        if ( is_array($element) )   {
            $nested = nested_array_column ( $element, $key );
            // If the recursive call returns a value
            if ( $nested !== false )    {
                return $nested;
            }
        }
    }
    // Not found, return false
    return false;
}
$bar = nested_array_key_search($array, 2);

print_r($bar);

给...

Array
(
    [5] => Array
        (
            [7] => Array
                (
                    [46] => Array
                        (
                        )

                )

        )

    [108] => Array
        (
        )

)