PHP - намиране на главни категории

Здравейте, имам един масив със структура от категории и главните към тях, но не успях да създам правилно структурата. Получава се малко наобратно - имам вътрешните категории и искам да намеря кои са им главните до самото начало.
Код:
$ar[] = ['id' => 4, 'base' => 3];
$ar[] = ['id' => 3, 'base' => 2];
$ar[] = ['id' => 2, 'base' => 1];
$ar[] = ['id' => 1, 'base' => 0];
Това е един прост пример - да кажем че имам най-вътрешната категория с id 4 и в нея се вижда, че главната е с id 3. Но след това на 3 гладната е 2, на 2 главната е 1, а 1 е най-главната. Има ли прост и лесен начин да се намерят id-тата на всички главни категории, че се пробвах с няколко foreach-а един в друг и се получава, но става доста бавно?
 
Всички главни категории са ти в base.
Да, но трябва да се създаде структура - например в момента искам да знам за категория с id 4 кои са главните и трябва да се създаде един масив със стойности 3,2,1 - 3 се вижда, но аз правя един foreach и намирам че на 3 главното е 2, после още един и намирам че на 2 главното е 1 и след това още един път. Въпроса е дали не може по-лесно и динамично, а и не се знае колко нива ще са категориите, може и да са 10 например.
 

manuel

Active Member
Рекурсия :)

PHP:
$category = array(...) //тук ти е категорията да речем..
$parent_id = $category['parent_id']; // Временна променлива да държиш parent_id;
$allParents = array(); //Масив, в който ще държиш всички категории в дървото нагоре от текущата;
while ($parent_id != 0) { // Въртиш докато parent не стане 0 - т.е. не е главна категория;
    $data = getCategoryById($parent_id); //Заявка или функция, която ти взима категория от ID
    $allParents[] = $data;
    $parent_id = $data['parent_id'];
}
Като свърши цикъла в $parent_id ще имаш главната категория.
А всички категории ще са ти в масива $allParents. Ако ти трябват в обратния ред, за да сглобиш да речем breadcrumbs или url, можеш да ги обърнеш с array_reverse, за са ти подредени главни категория >> подкатегория.
 

Горе