如何使用PHP将所有数组(包括关联数组)制作成单层数组?

时间:2016-10-05 15:29:07

标签: php arrays codeigniter associative-array hierarchy

希望你能帮助我。因为我正在尝试对它们进行重新排序,但我首先需要将它放在单个级别的数组中。从关联数组到单数组。

$MY_ASSOC_ARRAY
Array
(
    [0] => Array
        (
            [MAIN_ID] => 1
            [ORDER] => 1
            [NAME] => Animal
            [PARENT_ID] => 0
            [childs] => Array
                (
                    [0] => Array
                        (
                            [MAIN_ID] => 4
                            [ORDER] => 4
                            [NAME] => doggie
                            [PARENT_ID] => 1
                            [childs] => Array
                                (
                                    [0] => Array
                                        (
                                            [MAIN_ID] => 18
                                            [ORDER] => 18
                                            [NAME] => hunting
                                            [PARENT_ID] => 4
                                            [childs] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [MAIN_ID] => 21
                                                            [ORDER] => 21
                                                            [NAME] => setter
                                                            [PARENT_ID] => 18
                                                        )

                                                    [1] => Array
                                                        (
                                                            [MAIN_ID] => 22
                                                            [ORDER] => 22
                                                            [NAME] => pointer
                                                            [PARENT_ID] => 18
                                                        )

                                                )
                                        )

                                    [1] => Array
                                        (
                                            [MAIN_ID] => 19
                                            [ORDER] => 19
                                            [NAME] => companion
                                            [PARENT_ID] => 4
                                        )
                                )
                        )
                )
        )
)

好了,现在数组不应该在那个多级(关联)数组中,而是看起来像这样:

   Array
(
    [0] => Array
        (
            [MAIN_ID] => 1
            [ORDER] => 1
            [NAME] => Animal
            [PARENT_ID] => 0
        )

    [1] => Array
        (
            [MAIN_ID] => 4
            [ORDER] => 4
            [NAME] => doggie
            [PARENT_ID] => 1
        )

    [2] => Array
        (
            [MAIN_ID] => 18
            [ORDER] => 18
            [NAME] => hunting
            [PARENT_ID] => 4
        )

    [3] => Array
        (
            [MAIN_ID] => 21
            [ORDER] => 21
            [NAME] => setter
            [PARENT_ID] => 18
        )

    [4] => Array
        (
            [MAIN_ID] => 22
            [ORDER] => 22
            [NAME] => pointer
            [PARENT_ID] => 18
        )

    [5] => Array
        (
            [MAIN_ID] => 19
            [ORDER] => 19
            [NAME] => companion
            [PARENT_ID] => 4
        )
)

我不确定如果不使用会影响速度的太多内存而使用Php Codeigniter,最有效的方式将如何实现。谢谢!

[更新#1] 这是我尝试的代码,但顺序不同

foreach($tree as $key => $value) {
    $single[] = $value;
}

这是失败的尝试的输出......

Array
(
    [0] => Array
        (
            [MAIN_ID] => 1
            [ORDER] => 1
            [NAME] => Animal
            [PARENT_ID] => 0
        )

    [1] => Array
        (
            [MAIN_ID] => 4
            [ORDER] => 4
            [NAME] => doggie
            [PARENT_ID] => 1
        )

    [2] => Array
        (
            [MAIN_ID] => 18
            [ORDER] => 18
            [NAME] => hunting
            [PARENT_ID] => 4
        )

    [3] => Array
        (
            [MAIN_ID] => 19
            [ORDER] => 19
            [NAME] => companion
            [PARENT_ID] => 4

        )

    [4] => Array
        (
            [MAIN_ID] => 21
            [ORDER] => 21
            [NAME] => setter
            [PARENT_ID] => 18
        )

    [5] => Array
        (
            [MAIN_ID] => 22
            [ORDER] => 22
            [NAME] => pointer
            [PARENT_ID] => 18
        )
)

[NAME] => companion应该是最后一个数组而不是4号([3] =>数组)

更新#2:

如果这个问题或问题在你的结尾没有用,那么对于下来的选票感到不好

1 个答案:

答案 0 :(得分:1)

<?php
    $array =  Array(
    0 => Array
        (
            'MAIN_ID' => 1,
            'ORDER' => 1,
            'NAME' => 'Animal',
            'PARENT_ID' => 0,
            'childs' => Array
                (
                    0 => Array
                        (
                            'MAIN_ID' => 4,
                            'ORDER' => 4,
                            'NAME' => 'doggie',
                            'PARENT_ID' => 1,
                            'childs' => Array
                                (
                                    0 => Array
                                        (
                                            'MAIN_ID' => 18,
                                            'ORDER' => 18,
                                            'NAME' => 'hunting',
                                            'PARENT_ID' => 4,
                                            'childs' => Array
                                                (
                                                    0 => Array
                                                        (
                                                            'MAIN_ID' => 21,
                                                            'ORDER' => 21,
                                                            'NAME' => 'setter',
                                                            'PARENT_ID' => 18,
                                                        ),

                                                    1 => Array
                                                        (
                                                            'MAIN_ID' => 22,
                                                            'ORDER' => 22,
                                                            'NAME' => 'pointer',
                                                            'PARENT_ID' => 18,
                                                        )

                                                )
                                        ),

                                    1 => Array
                                        (
                                            'MAIN_ID' => 19,
                                            'ORDER' => 19,
                                            'NAME' => 'companion',
                                            'PARENT_ID' => 4,
                                        )
                                )
                        )
                )
        )
);
$out = [];
$out = generateArray($array, $out);
print_r($out);

function generateArray($in, $out){
    foreach($in as $value){
        $childs = false;
        if(isset($value['childs'])){
            $childs = $value['childs'];
            unset($value['childs']);
        }
        $out[] = $value;
        if($childs)
            $out = generateArray($childs, $out);
    }
    return $out;
}
?>