За последние 24 часа нас посетили 17344 программиста и 1672 робота. Сейчас ищут 1655 программистов ...

Как вывести многомерный массив по связям?

Тема в разделе "Сделайте за меня", создана пользователем Steve_Aligreeti, 30 янв 2022.

Метки:
  1. Steve_Aligreeti

    Steve_Aligreeti Новичок

    С нами с:
    30 янв 2022
    Сообщения:
    5
    Симпатии:
    0
    Всем привет, есть такой вот массив
    PHP:
    1.     Array(
    2.     "id" => 1
    3.         "parent_id" => 0
    4.         "name" => "aaaa"
    5.     )
    6.     Array(
    7.     "id" => 2
    8.         "parent_id" => 0
    9.         "name" => "bbb"
    10.     )
    11.     Array(
    12.     "id" => 3
    13.         "parent_id" => 0
    14.         "name" => "ccc"
    15.     )
    16.     Array(
    17.     "id" => 4
    18.         "parent_id" => 0
    19.         "name" => "ddd"
    20.     )
    21.     Array(
    22.     "id" => 4
    23.         "parent_id" => 1
    24.         "name" => "eee"
    25.     )
    26.     Array(
    27.     "id" => 5
    28.         "parent_id" => 2
    29.         "name" => "fff"
    30.     )
    31.     Array(
    32.     "id" => 6
    33.         "parent_id" => 3
    34.         "name" => "ggg"
    35.     )
    36.     Array(
    37.     "id" => 7
    38.         "parent_id" => 1
    39.         "name" => "hhh"
    40.     )
    41. )

    Как я могу вывести на страницу что-то подобное:
    PHP:
    1.     Array(
    2.     "id" => 1
    3.         "parent_id" => 0
    4.         "name" => "aaaa"
    5.             «sub_item» => [
    6.      Array(
    7.     "id" => 4
    8.         "parent_id" =>1
    9.         "name" => "eee"
    10.     )
    11.     Array(
    12.     "id" => 7
    13.         "parent_id" => 1
    14.         "name" => "hhh"
    15.     )
    16.  
    17.     ]
    18.  
    19.     )
    20.  
    21.     Array(
    22.     "id" => 2
    23.         "parent_id" => 0
    24.         "name" => "bbb"
    25.                 «sub_item» => [
    26.      Array(
    27.     "id" => 5
    28.         "parent_id" => 2
    29.         "name" => "fff"
    30.     )
    31.     ]
    32.  
    33.     )
    34.  
    35.     Array(
    36.     "id" => 3
    37.         "parent_id" => 0
    38.         "name" => "ccc"
    39.             "subitem" => [
    40.     Array(
    41.     "id" => 6
    42.         "parent_id" => 3
    43.         "name" => "ggg"
    44.     )
    Без готовых циклов, цикл можно самому с 0 написать

     
    #1 Steve_Aligreeti, 30 янв 2022
    Последнее редактирование: 30 янв 2022
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    1. Сделать массив ссылок на каждый элемент
    2. Потом пройтись по элементам, находить через массив созданный на шаге 1 парентов, и писать в них субайтомы.
    3. Отсеять из массива все элементы, у которых парент не 0, мы их уже распределили, куда надо.

    Обожаю ссылки, поэтому так и быть, вот даже код:
    http://sandbox.onlinephpfunctions.com/code/d783215591bebff78828018b51c8b356412b3644

    (то, что редактор ошибку показывает - не обращай внимание, у них редактор не знает php 7.4, в котором стрелочные функции появились)
     
  3. Steve_Aligreeti

    Steve_Aligreeti Новичок

    С нами с:
    30 янв 2022
    Сообщения:
    5
    Симпатии:
    0

    Спасибо большое)) Очень помогли))
     
    #3 Steve_Aligreeti, 30 янв 2022
    Последнее редактирование: 30 янв 2022
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Что такое "готовые циклы", и чем они отличаются от "неготовых"?

    Обычно могут ограничивать стандартные функции. Написать свой array_filter - запросто можно, но ты такой задачи не ставил в первом сообщении.
    Можно было не foreach, а for заюзать, только зачем, если в языке есть специальный цикл именно для перебора массивов.
    Можно было вместо циклов array_walk заюзать, но у неё внутри такой же цикл, если что :)

    Можно было, конечно, вообще без циклов, с goto, но это извращение, за такое и уволить могут :) Или 2 влепить :)

    Но, чтобы работать с массивами, нужны какие-то итерации.
     
  5. Steve_Aligreeti

    Steve_Aligreeti Новичок

    С нами с:
    30 янв 2022
    Сообщения:
    5
    Симпатии:
    0
    Понимаю что под капотом все равно тот же цикл)) Но это задачка от уч. материала такая стоит у меня) Написать как вы сказали array_walk или же goto.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    А ты точно её понял? Можешь процитировать её прямо как есть?

    Циклы через goto организуют только на ассемблере, на языках высокого уровня его (goto)
    стараются избегать. В пыхе его вообще не было до версии 5.3.
    Ну если действительно циклы нельзя, а готовые функции можно - возьми array_walk, почитай доку. Алгоритм описанный это не сильно меняет.
     
  7. Steve_Aligreeti

    Steve_Aligreeti Новичок

    С нами с:
    30 янв 2022
    Сообщения:
    5
    Симпатии:
    0

    Существует массив с такими данными, принятыми из базы:
    {первый массив который скинул}
    Создать многомерный массив по связям «parent_id» => “id”
    Не используя циклы.
    На выходе должно получится:
    {второй массив который я скинул вышел}
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Бред...
    --- Добавлено ---
    Ну напиши всё тоже самое, только готухи вместо циклов... Только потом в реальных проектах так не делай
     
  9. Steve_Aligreeti

    Steve_Aligreeti Новичок

    С нами с:
    30 янв 2022
    Сообщения:
    5
    Симпатии:
    0
    хорошо, спасибо за совет)