【问题标题】:how to make an all arrays (including associative array) to single level of array using php?如何使用 php 将所有数组(包括关联数组)制作成单级数组?
【发布时间】:2016-10-05 15:29:06
【问题描述】:

希望你能帮我解决这个问题。因为我正在尝试对它们进行重新排序,但我首先需要使它们处于单一级别的数组中。从关联数组到单数组。

$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] => 同伴应该在最后一个数组而不是第 4 个([3] => 数组)

更新 #2:

对否决票感到难过...如果这个问题对您没有用处

【问题讨论】:

  • 不确定,到目前为止您尝试过什么。
  • 如何生成数组?也许可以简单地改变它。
  • @RiggsFolly 请检查更新 #1 以获取我尝试过的代码。
  • @PeterM 有个很好的建议
  • @PeterM 数组已生成并已由多个函数调整以形成层次结构。

标签: php arrays codeigniter associative-array hierarchy


【解决方案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;
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多