tyukavin_denis
@tyukavin_denis
web developer

Как сгруппировать данные массива?

Необходимо вывести двухуровневое меню. Меню представлено массивом классов и имеет следующий вид:
Array ( 
  [0] => stdClass Object ( 
            [ID1] => 000000036 
            [NAME1] => Блоки, крюковые подвески 
            [ID2] => 000000057 
            [NAME2] => Блоки монтажные 
  ) 
  [1] => stdClass Object ( 
            [ID1] => 000000036 
            [NAME1] => Блоки, крюковые подвески 
            [ID2] => 000000058 
            [NAME2] => Блоки усиления 
  ) 
  [2] => stdClass Object ( 
            [ID1] => 000000036 
            [NAME1] => Блоки, крюковые подвески 
            [ID2] => 000000060 
            [NAME2] => Крюковые подвески 
  ) [3] => stdClass Object ( 
              [ID1] => 000000094 
              [NAME1] => Домкраты 
              [ID2] => 
              [NAME2] => 
  ) [4] => stdClass Object ( 
              [ID1] => 000000016 
              [NAME1] => Захваты 
              [ID2] => 000000219 
              [NAME2] => Захват бетонных блоков 
  ) [5] => stdClass Object ( 
              [ID1] => 000000016 
              [NAME1] => Захваты 
              [ID2] => 000000221 
              [NAME2] => Захват бетонных колец 
  ) [6] => stdClass Object ( 
              [ID1] => 000000016 
              [NAME1] => Захваты 
              [ID2] => 000000215 
              [NAME2] => Захват бордюрного камня 
  )
...

и так далее.
Нужно сгруппировать все элементы по ID1 и вывести в одну ссылку, а элементы ID2 в немаркированный список (ссылок) внутри ссылки. Если ID1 изменился - новая ссылка.

Пример отображения на рисунке ниже:
5d766869360b1138433870.png
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
irishmann
@irishmann
Научись пользоваться дебаггером
Оно?
Код
<?php
    $old = [
        (object)[
            'ID1' => '000000036',
            'NAME1' => 'Блоки, крюковые подвески',
            'ID2' => '000000057',
            'NAME2' => 'Блоки монтажные',
        ],
        (object)[
            'ID1' => '000000036',
            'NAME1' => 'Блоки, крюковые подвески',
            'ID2' => '000000058',
            'NAME2' => 'Блоки усиления',
        ],
        (object)[
            'ID1' => '000000036',
            'NAME1' => 'Блоки, крюковые подвески',
            'ID2' => '000000060',
            'NAME2' => 'Крюковые подвески',
        ],
        (object)[
              'ID1' => '000000094',
              'NAME1' => 'Домкраты',
              'ID2' => '',
              'NAME2' => '',
        ],
        (object)[
              'ID1' => '000000016',
              'NAME1' => 'Захваты',
              'ID2' => '000000219',
              'NAME2' => 'Захват бетонных блоков',
        ],
        (object)[
              'ID1' => '000000016',
              'NAME1' => 'Захваты',
              'ID2' => '000000221',
              'NAME2' => 'Захват бетонных колец',
        ],
        (object)[
              'ID1' => '000000016',
              'NAME1' => 'Захваты',
              'ID2' => '000000215',
              'NAME2' => 'Захват бордюрного камня',
        ],
    ];

    $new = [];
    foreach ($old as $item){
        $new[$item->ID1]['block_id'] = $item->ID1;
        $new[$item->ID1]['block_name'] = $item->NAME1;
        $new[$item->ID1]['block_items'][] = [
            'item_id' => $item->ID2,
            'item_name' => $item->NAME2,
        ];
    }
    print_r($new);

Результат

Array
(
    [000000036] => Array
        (
            [block_id] => 000000036
            [block_name] => Блоки, крюковые подвески
            [block_items] => Array
                (
                    [0] => Array
                        (
                            [item_id] => 000000057
                            [item_name] => Блоки монтажные
                        )

                    [1] => Array
                        (
                            [item_id] => 000000058
                            [item_name] => Блоки усиления
                        )

                    [2] => Array
                        (
                            [item_id] => 000000060
                            [item_name] => Крюковые подвески
                        )

                )

        )

    [000000094] => Array
        (
            [block_id] => 000000094
            [block_name] => Домкраты
            [block_items] => Array
                (
                    [0] => Array
                        (
                            [item_id] => 
                            [item_name] => 
                        )

                )

        )

    [000000016] => Array
        (
            [block_id] => 000000016
            [block_name] => Захваты
            [block_items] => Array
                (
                    [0] => Array
                        (
                            [item_id] => 000000219
                            [item_name] => Захват бетонных блоков
                        )

                    [1] => Array
                        (
                            [item_id] => 000000221
                            [item_name] => Захват бетонных колец
                        )

                    [2] => Array
                        (
                            [item_id] => 000000215
                            [item_name] => Захват бордюрного камня
                        )

                )

        )

)

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы