在PHP中展平多维树数组

时间:2014-02-02 22:06:52

标签: php

我有一个带有父子关系的Tree结构化数组。 我希望将数组展平以便于解析。

Array
(
[0] => Array
    (
        [ParentID] => 11653
        [FolderID] => 11823
        [Items] => Array
            (
                [0] => Array
                    (
                        [ParentID] => 11823
                        [FolderID] => 11824
                        [Items] => Array
                            (
                                [0] => Array
                                    (
                                        [ParentID] => 11824
                                        [FolderID] => 11827
                                        [Items] => Array
                                            (
                                                [0] => Array
                                                    (
                                                        [ParentID] => 11827
                                                        [FolderID] => 11828
                                                    )

                                            )

                                    )

                            )

                    )

                [1] => Array
                    (
                        [ParentID] => 11823
                        [FolderID] => 11825
                        [Items] => Array
                            (
                                [0] => Array
                                    (
                                        [ParentID] => 11825
                                        [FolderID] => 11826
                                    )

                            )

                    )

            )

    )

)

期望的输出:

Array
(
[0] => Array
    (
        [ParentID] => 11653
        [FolderID] => 11823
 )
[1] => Array
      (
    [ParentID] => 11823
    [FolderID] => 11824
   )
[2] => Array
        (
    [ParentID] => 11824
    [FolderID] => 11827
    )
[3] => Array
        (
    [ParentID] => 11827
    [FolderID] => 11828
    )
[4] => Array
        (
    [ParentID] => 11823
    [FolderID] => 11825
    )
[5] => Array
(
    [ParentID] => 11825
    [FolderID] => 11826
)

)

我在这里尝试了许多扁平化逻辑,但我无法获得所需的输出。

3 个答案:

答案 0 :(得分:2)

使用array_walk_recursive,其中$ array是你的数组,$ new_array是扁平数组。

array_walk_recursive($array, function($item, $key) use (&$new_array, &$i)
{
    $new_array[(int) $i][$key] = $item; 
    ($key == 'ParentID') ?: $i++;
});

var_dump($new_array);

如果你想要它进行解析,你也可以这样做:

array_walk_recursive($array, function($item, $key)
{
    *Your parsing for each array*
});

答案 1 :(得分:1)

此功能适用于展平多维数组:

function array_flatten($array)
{ 
    if(!is_array($array)) { 
        return FALSE; 
    } 

    $result = array(); 

    foreach($array as $key => $value) { 
        if(is_array($value)) { 
            $result = array_merge($result, array_flatten($value)); 
        } else { 
          $result[$key] = $value; 
        } 
    }

    return $result; 
}

答案 2 :(得分:-1)

从静态变量开始。

然后创建一个接受数组的函数,迭代它,并使用ParentID和FolderID向静态变量添加一个元素。如果数组还包含名为“Items”的元素并且是一个数组,则将其递归地应用于此函数。