Как преобразовать массив из одного массива в многомерный массив на PHP - PullRequest
1 голос
/ 18 апреля 2019

У меня есть массив из файла Excel, подобный этому.

   $array = [
     ['parent 1', '10000', '20000'],
     ['parent 1', '15000', '21000'],
     ['parent 2', '13000', '22000'],
     ['parent 2', '11000', '5000'],
   ];

Как преобразовать массив выше с php в массив, как показано ниже

   $array = [
     'parent 1' => [
        ['10000', '20000'],
        ['15000', '21000']
     ],
     'parent 2' => [
        ['13000', '22000'],
        ['11000', '5000']
     ]
   ];

Ответы [ 3 ]

3 голосов
/ 18 апреля 2019

Вам нужно перебрать массив, чтобы сделать первое значение ключом, а остальные его значения.

Версия 1

$result = [];
foreach ($arr as $k => $v) {
    $result[$v[0]][] = [ // making first value as key and reset its values
        $v[1], $v[2],
    ];
}
print_r($result);

Демо .

EDIT

Версия 2

$result = [];
foreach ($arr as $k => $v) {
    $result[array_shift($v)][] = $v;
}
print_r($result);

выход

Array
(
    [parent 1] => Array
        (
            [0] => Array
                (
                    [0] => 10000
                    [1] => 20000
                )

            [1] => Array
                (
                    [0] => 15000
                    [1] => 21000
                )

        )

    [parent 2] => Array
        (
            [0] => Array
                (
                    [0] => 13000
                    [1] => 22000
                )

            [1] => Array
                (
                    [0] => 11000
                    [1] => 5000
                )

        )

)
0 голосов
/ 18 апреля 2019

Вот решение:

Демо: https://3v4l.org/XoivL

   $array = [
     ['parent 1', '10000', '20000'],
     ['parent 1', '15000', '21000'],
     ['parent 2', '13000', '22000'],
     ['parent 2', '11000', '5000'],
   ];


    $new_array = array();

    foreach($array as $a) {
       $temp = array_slice($a, 1);

      if(!array_key_exists($a[0], $new_array)) {
          $new_array[$a[0]] = array();
      }

       array_push($new_array[$a[0]], $temp);

    }

    print_r($new_array)

ВЫВОД:

Array
(
[parent 1] => Array
    (
        [0] => Array
            (
                [0] => 10000
                [1] => 20000
            )

        [1] => Array
            (
                [0] => 15000
                [1] => 21000
            )

    )

[parent 2] => Array
    (
        [0] => Array
            (
                [0] => 13000
                [1] => 22000
            )

        [1] => Array
            (
                [0] => 11000
                [1] => 5000
            )

    )

)
0 голосов
/ 18 апреля 2019

Попробуйте это простое и точное решение.

$array = [
   ['parent 1', '10000', '20000'],
   ['parent 1', '15000', '21000'],
   ['parent 2', '13000', '22000'],
   ['parent 2', '11000', '5000'],
 ];

$output = [];
foreach ($array as $key => $value) {
    $output[$value[0]][] = array($value[1],$value[2]);
}
print_r($output);

parent 1 и parent 2 лежат в индексе 0, а другие сущности - в индексах 1 и 2. Я присвоил 1 и 2 значения индекса для 0 индекса в новом массиве при каждой итерации

OUTPUT

    Array
(
    [parent 1] => Array
        (
            [0] => Array
                (
                    [0] => 10000
                    [1] => 20000
                )

            [1] => Array
                (
                    [0] => 15000
                    [1] => 21000
                )

        )

    [parent 2] => Array
        (
            [0] => Array
                (
                    [0] => 13000
                    [1] => 22000
                )

            [1] => Array
                (
                    [0] => 11000
                    [1] => 5000
                )

        )

)

Вот демоверсия

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