Конвертировать один массив в многомерный - PullRequest
0 голосов
/ 20 сентября 2019

Я новичок в 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 голосов
/ 20 сентября 2019

Ниже приведен один из способов сделать это:

<code><?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)."
");

Это вернет следующий результат:

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
                                        )

                                )

                        )

                )

        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...