PHP中未知深度的多维数组到一维数组及相关键

PHP中未知深度的多维数组到一维数组及相关键,php,arrays,recursion,Php,Arrays,Recursion,我有一个递归函数,它可以输出如下所示的数据 Array ( [17] => Array ( [cat_id] => 17 [cat_name] => test.example.1 [cat_parent] => 16 [cat_slug] => Test Example 1 ) [18] => Array ( [16] => Array

我有一个递归函数,它可以输出如下所示的数据

Array
(
[17] => Array
    (
        [cat_id] => 17
        [cat_name] => test.example.1
        [cat_parent] => 16
        [cat_slug] => Test Example 1
    )

[18] => Array
    (
        [16] => Array
            (
                [cat_id] => 16
                [cat_name] => test.example.2
                [cat_parent] => 15
                [cat_slug] => Test Example 2
            )

        [17] => Array
            (
                [15] => Array
                    (
                        [cat_id] => 15
                        [cat_name] => test.example.3
                        [cat_parent] => 6
                        [cat_slug] => Test Example 3
                    )

                [16] => Array
                    (
                        [6] => Array
                            (
                                [cat_id] => 6
                                [cat_name] => test.example.4
                                [cat_parent] => 2
                                [cat_slug] => Test Example 4
                            )

                        [7] => Array
                            (
                                [2] => Array
                                    (
                                        [cat_id] => 2
                                        [cat_name] => test.example.5
                                        [cat_parent] => 0
                                        [cat_slug] => Test Example 5
                                    )

                            )

                    )

            )

    )

)
我找不到在一维中创建此阵列的方法,因此我希望有人能够通过一些阵列播放帮助实现一维,保留相关的键

例如

 Array
 (
   [17] => Array
   (
    [cat_id] => 17
    [cat_name] => test.example.1
    [cat_parent] => 16
    [cat_slug] => Test Example 1
 )

    [16] => Array
 (
    [cat_id] => 16
    [cat_name] => test.example.2
    [cat_parent] => 15
    [cat_slug] => Test Example 2
  )


    [15] => Array
  (
    [cat_id] => 15
    [cat_name] => test.example.3
    [cat_parent] => 6
    [cat_slug] => Test Example 3
   )


    [6] => Array
   (
    [cat_id] => 6
    [cat_name] => test.example.4
    [cat_parent] => 2
    [cat_slug] => Test Example 4
   )


    [2] => Array
   (
    [cat_id] => 2
    [cat_name] => test.example.5
    [cat_parent] => 0
    [cat_slug] => Test Example 5
   )

  )

你循环,如果是数组(值)循环againIt有点棘手@Ibu,因为他正在寻找的项目也是数组,你有你提到的这个递归函数的代码吗?因为在我看来,这就是问题所在。@nl-x array\u walk不会递归。而array\u walk\u recursive会递归得太远,因为它会进入他树叶子上的数组。@Ozmah我将把递归函数作为一个单独的问题发布。巴尔马已经解决了这个问题。
else
应该是
elseif
我猜。
function flatten($array, &$newArray) {
    foreach($array as $i => $el) {
        if (!is_array($array)) {
            return;
        }
        if (isset($el['cat_id'])) {
            $newArray[$i] = $el;
        } elseif (is_array($el)) {
            flatten($el, $newArray);
        }
    }
}
$result = array();
flatten($array, $result);