PHP 多维数组迭代


php multi dimensional array iteration

我一直在尝试遍历这个数组以获得所需的结果,但没有成功。希望这里有人可以帮助我。我有以下类别和子类别以及类别 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>';
}
 }

打印类别(2, '猫');