Пересобрать массив с поиском родителя

        Array
(
    [315] => Array
        (
            [name] => Краматорск
            [href] => #
            [dob] => 304
        )

    [310] => Array
        (
            [name] => Винницкая
            [href] => #
            [dob] => 
        )

    [308] => Array
        (
            [name] => Волынская
            [href] => #
            [dob] => 
        )

    [306] => Array
        (
            [name] => Днепропетровская
            [href] => #
            [dob] => 
        )

    [304] => Array
        (
            [name] => Донецкая
            [href] => #
            [dob] => 
        )
        )

У Краматорска есть dob где указан родитель. Не знаю как правильно пересобрать массив что-бы на выходе было

        Array
(
   
    [310] => Array
        (
            [name] => Винницкая
            [href] => #
            [dob] => 
        )

    [308] => Array
        (
            [name] => Волынская
            [href] => #
            [dob] => 
        )

    [306] => Array
        (
            [name] => Днепропетровская
            [href] => #
            [dob] => 
        )

    [304] => Array
        (
            [name] => Донецкая
            [href] => #
            [dob] => [0] => Array
        (
            [name] => Краматорск
            [href] => #
            [dob] => 304
        )
        )
        )

Ответы (1 шт):

Автор решения: Егор Банин

В таких случаях пробуйте покрутить задачу в уме, сформулировать её другими словами. Вы сейчас хотите "пересобрать массив", это звучит довольно неопределённо. Что если сформулировать задачу так: "как поместить Краматорск в Донецкую?". Тут уже есть за что зацепиться.

Сперва надо извлечь Краматорск из общего списка.

$kramatorsk = $arr[315];
unset($arr[315]);

Затем надо найти Донецкую. Её номер есть в свойствах Краматорска.

$id = $kramatorsk['dob'];
$doneckaya = &$arr[$id]; // ссылка нужна, чтобы потом менять Донецкую в общем списке

Осталось только добавить Краматорск в донецкую.

$doneckaya['dob'][] = $kramatorsk;

Теперь можно поглядеть на весь этот код и сделать некоторые обобщения. Краматорск отличается от других объектов в списке тем, что у него число в dob. Значит такое можно провернуть со всеми объектами, у которых в dob число.

Разобравщись с алгоритмом, вы можете его модифицировать. Например не менять исходный список, а собирать рядом новый. Дерзайте.

→ Ссылка