Я пытался перебрать этот массив, чтобы получить желаемый результат, но безуспешно. Надеюсь, кто-то здесь может мне помочь. У меня есть следующий многомерный массив категорий и подкатегорий и идентификатор категории.
Array
(
[categories] => Array
(
[2] => Array
(
[category_id] => 2
[sub_categories] => Array
(
[36] => Men
)
)
[36] => Array
(
[category_id] => 36
[sub_categories] => Array
(
[37] => Clothing
[38] => Shoes
)
)
[37] => Array
(
[category_id] => 37
[sub_categories] => Array
(
[39] => Outerwear
[42] => Tops
)
)
[38] => Array
(
[category_id] => 38
[sub_categories] => Array
(
)
)
[39] => Array
(
[category_id] => 39
[sub_categories] => Array
(
[49] => Jackets
)
)
[42] => Array
(
[category_id] => 42
[sub_categories] => Array
(
[46] => Sweaters
)
)
)
)
Я хотел бы использовать для каждого цикла, чтобы я мог пройти через этот массив, чтобы создать дерево категорий для магазина magento. Желаемый вывод для дерева ниже:
Men
-Clothing
-Outerwear
-Jackets
-Tops
-Sweaters
-Shoes
или в HTML
<ul>
<li class="cat">
Men
</li>
<li class="cat">
Clothing
<ul>
<li class="subcat">Outerwear</li>
<ul>
<li class="subsubcat">Jackets</li>
</ul>
</li>
<li class="subcat">Tops</li>
<ul>
<li class="subsubcat">Sweaters</li>
</ul>
</li>
</ul>
</li>
<li class="cat">Shoes</li>
</ul>
Любые указатели высоко ценятся.
Поскольку вы не знаете, с чего начать, я дам вам несколько подсказок для одного возможного решения (есть другие решения, это не единственный способ сделать это!)
Наше решение рекурсивное, вам нужно определить начальную точку и начать разбивать свою проблему на подзадачи, а затем решить каждую проблему в одиночку
Думайте о массиве категорий как о массиве одного уровня (без подкатегорий), что бы вы сделали, чтобы напечатать массив одного уровня? простой цикл, теперь вы хотите напечатать подкатегории этой категории, обрабатывать их так, как если бы они были другими индивидуальными проблемами, просто применяя к ним одно и то же исходное решение!
вот фрагмент кода
<?php
$arr = ... // this contains your categories initialization
function printCategory($cat_id, $lvl)
{
$ret = '';
foreach($arr[$cat_id]['sub_categories'] as $sub_cat_id => $sub_cat_name)
{
$ret = "<li class='{$lvl}'>{$sub_cat_name}</li>";
$sub_sub_cats = printCategory($sub_cat_id, 'sub' . $lvl);
// check if $sub_sub_cats is empty, then don't display a new <ul>
// else dispay a new <ul> and enclose the returned data in it
}
return $ret;
}
echo printCategory($x, $y);
// try to figure out what are the values of $x and $y
?>
Через несколько дней и с помощью Abdo Adel с рекурсией приведем код, который сгенерировал вывод.
function printCategory($cat_id, $lvl, )
{foreach($arr[$cat_id]['sub_categories'] as $sub_cat_id => $sub_cat_name)
{
echo '<li class="'.$lvl.'">'.$sub_cat_name.'';
if($arr[$sub_cat_name]['sub_categories']){
echo'<ul>';
printCategory($sub_cat_id, 'sub' . $lvl);
echo '</ul>';
}
echo '</li>';
}
}
printCategory (2, ‘cat’);