Пересобрать массив с поиском родителя
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 число.
Разобравщись с алгоритмом, вы можете его модифицировать. Например не менять исходный список, а собирать рядом новый. Дерзайте.