php多维数组迭代

时间:2015-01-04 20:06:55

标签: php arrays magento 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
                )
        )
)

)

我想为每个循环使用a,这样我就可以循环遍历这个数组,为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>

非常感谢任何指示。

2 个答案:

答案 0 :(得分:0)

由于您不知道如何开始,我会给您一些可能的解决方案的大提示(还有其他解决方案,这不是唯一的方法!)

我们的解决方案是递归的,您需要定义一个起点并开始将问题分解为子问题,然后单独解决每个问题

将类别数组视为单级数组(无子类别),您将如何打印单级数组?一个简单的循环,现在你要打印这个类别的子类别,只要对它们应用相同的初始解决方案就可以将它们视为不同的其他个别问题!

这是一段代码

<?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 
?>

答案 1 :(得分:0)

几天之后,在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,&#39; cat&#39;);