php多维数组迭代
php multi dimensional array iteration
我一直在尝试遍历此数组以获得所需的结果,但 success.Hopefully 这里没有人可以帮助我。我有以下类别和子类别以及类别 ID 的多维数组。
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
)
)
)
)
我想使用 for each 循环,这样我就可以遍历这个数组来为 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');
我一直在尝试遍历此数组以获得所需的结果,但 success.Hopefully 这里没有人可以帮助我。我有以下类别和子类别以及类别 ID 的多维数组。
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
)
)
)
)
我想使用 for each 循环,这样我就可以遍历这个数组来为 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');