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');