将单数组转换为多维

时间:2019-09-20 06:50:42

标签: php arrays multidimensional-array

我是PHP新手,我需要在php中将一维数组转换为多维数组

我有这样的数据,需要将其最小化如下。

Array
(
    [0] => Array
        (
            [0] => David
            [1] => School
            [2] => 19
            [3] => 29
        )

    [1] => Array
        (
            [0] => Paul
            [1] => Home
            [2] => 19
            [3] => 29
        )

    [2] => Array
        (
            [0] => Paul
            [1] => Cinema
            [2] => 19
            [3] => 29
        )

    [3] => Array
        (
            [0] => Paul
            [1] => Park
            [2] => 19
            [3] => 29
        )

    [4] => Array
        (
            [0] => Rossie
            [1] => Playground
            [2] => 19
            [3] => 29
        )

    [5] => Array
        (
            [0] => Rossie
            [1] => Hotel
            [2] => 19
            [3] => 29
        )

    [6] => Array
        (
            [0] => Rossie
            [1] => Hospital
            [2] => 19
            [3] => 29
        )
)

我想将其转换为多维

Array
(
    [0] => Array
        (
            [0] => Array
            (
                [0] => David 
                            (
                                [0] => School 
                                (
                                    [0] => 19
                                    [1] => 29
                                    [2] => 39
                                    [3] => 49
                                )

                            )
            )

        )

    [1] => Array
        (
            [0] => Array
            (
                [0] => Paul 
                            (
                                [0] => Home 
                                (
                                    [0] => 19
                                    [1] => 29
                                    [2] => 39
                                    [3] => 49
                                )

                                [1] => Cinema 
                                (
                                    [0] => 19
                                    [1] => 29
                                    [2] => 39
                                    [3] => 49
                                )

                                [1] => Park 
                                (
                                    [0] => 19
                                    [1] => 29
                                    [2] => 39
                                    [3] => 49
                                )

                            )
            )
        )


    [2] => Array
        (
            [0] => Array
            (
                [0] => Rossie 
                            (
                                [0] => Playground 
                                (
                                    [0] => 19
                                    [1] => 29
                                    [2] => 39
                                    [3] => 49
                                )

                                [1] => Hotel 
                                (
                                    [0] => 19
                                    [1] => 29
                                    [2] => 39
                                    [3] => 49
                                )

                                [1] => Hospital 
                                (
                                    [0] => 19
                                    [1] => 29
                                    [2] => 39
                                    [3] => 49
                                )

                            )
            )
        )


)

希望您有个好主意。但是我的函数无法正确执行此操作,或者可能还有其他方法可以更轻松地完成此操作?

感谢您的帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

以下是实现此目的的一种方法:

<?php
$arr = [array('David','School',19,29),
        array('Paul','Home',19,29),
        array('Paul','Cinema',19,29),
        array('Paul','Park',19,29),
        array('Rossie','Playground',19,29),
        array('Rossie','Hotel',19,29),
        array('Rossie','Hospital',19,29)];

// Get all names.
$names = array_unique(array_map(function($value){return $value[0];}, $arr));
$places = [];
// Create the multidimensional array, grouping by name.
foreach($names as $key => $name){
    $tempArr = [];
    foreach($arr as $record){
        if($record[0] === $name){
            $tempArr[][$record[1]] = array_slice($record,2);
        }
    }
    $places[][][$name] = $tempArr;
}
print("<pre>".print_r($places,true)."</pre>");

这将返回以下结果:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [David] => Array
                        (
                            [0] => Array
                                (
                                    [School] => Array
                                        (
                                            [0] => 19
                                            [1] => 29
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [Paul] => Array
                        (
                            [0] => Array
                                (
                                    [Home] => Array
                                        (
                                            [0] => 19
                                            [1] => 29
                                        )

                                )

                            [1] => Array
                                (
                                    [Cinema] => Array
                                        (
                                            [0] => 19
                                            [1] => 29
                                        )

                                )

                            [2] => Array
                                (
                                    [Park] => Array
                                        (
                                            [0] => 19
                                            [1] => 29
                                        )

                                )

                        )

                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [Rossie] => Array
                        (
                            [0] => Array
                                (
                                    [Playground] => Array
                                        (
                                            [0] => 19
                                            [1] => 29
                                        )

                                )

                            [1] => Array
                                (
                                    [Hotel] => Array
                                        (
                                            [0] => 19
                                            [1] => 29
                                        )

                                )

                            [2] => Array
                                (
                                    [Hospital] => Array
                                        (
                                            [0] => 19
                                            [1] => 29
                                        )

                                )

                        )

                )

        )

)
相关问题