Обратная иерархия категорий

tokyoby

Новичок
Добрый день. Помогите новичку.

Есть массив категорий, имеющих поля id,parrent_id,url где parrent_id - id ролителя

PHP:
$cats = array();
$result=mysql_query("SELECT id,parrent_id,url FROM table");
while (($row = mysql_fetch_assoc($result))) {
      $cats[] = $row;
}
Например
Раздел 1
Раздел 1.1
Раздел 1.2
Раздел 1.2.1
Раздел 1.3
Раздел 2
Раздел 2.1
Раздел 3
Раздел 3.1
Раздел 3.2
Раздел 3.3
Как зная id категории "Раздел 1.2.1" массива $cats вывести на php обратный массив родительских категорий содержащий урлы

Array
(
[0] => 'урл_раздела_1.2.1'
[1] => 'урл_раздела_1.2'
[2] => 'урл_раздела_1'
)
 
Последнее редактирование:

weregod

unserializer
если одним SQL-запросом и без последующей обработки результатов, то хранить в БД дополнительную информацию, которую нужно будет не забывать пересчитывать при изменении родителя категории
 

tokyoby

Новичок
Если можно как-то функциями на пхп, я понимаю что надо как-то рекурсией, но не могу осилить этот способ
 
Последнее редактирование:

Vano

Новичок
PHP:
$idCats = array_column($cats, null, 'id'); // переиндексировать на удобный массив

$child = $idCats[55]; // Тут (вместо 55) введи айди твоей записи '1.2.3'


$parents = [];
$parents[] = $child;

while(true) {
    if (!isset($idCats[$child['parent_id']])) break;
    $child = $idCats[$child['parent_id']];
    $parents[] = $child;
}

print_r($parents);
Если я правильно понял, что все категории ты уже вынул в $cats
 
Сверху