如何将复杂的多维关联数组输出到嵌套列表中


How to output a complex multidimensional associative array into nested lists

我想把下面的数组变成html中的嵌套列表。

$aMenu = array(
array("name" => "Page 1", 
      "url" => "http://www.microsoft.se", 
      "subpages" => array(
        array("name" => "Subpage 1.1", "url" => "http://www.reddit.com"),
        array("name" => "Subpage 1.2", "url" => "http://www.google.se"),          
        array("name" => "Subpage 1.3", "url" => "http://www.cnn.com"),
    )               
),          
array("name" => "Page 2", "url" => "http://www.facebook.com"),
array("name" => "Page 3",
      "url" => "http://www.bbc.co.uk",
      "subpages" => array(
          array("name" => "Subpage 3.1", "url" => "http://www.jamesedition.com"),
          array("name" => "Subpage 3.2", "url" => "http://www.huffpost.com"),
          array("name" => "Subpage 3.3", 
                "url" => "http://www.lagunitas.com",
                "subpages" => array(
                    array("name" => "Subpage 3.3.1", "url" => "http://www.burton.com"),
                    array("name" => "Subpage 3.3.2", "url" => "http://www.hm.com"),
                    array("name" => "Subpage 3.3.3", "url" => "http://www.apple.com"),
                ),
          ),
      ),                                
),
array("name" => "Page 4", "url" => "http://www.instagram.com"),
array("name" => "Page 5", "url" => "http://www.flickr.com"),
);

期望输出:

  • 第1页
    • 第1.1小节
    • 第1.2小节
    • 第1.3小节
  • 第2页
  • 第3页
    • 第3.1小节
    • 第3.2小节
    • 第3.3小节
      • 第3.3.1小节
      • 第3.3.2小节
      • 第3.3.3小节
  • 第4页
  • 第5页

我知道如何手动完成这项工作,也知道如何在数组的单个级别中循环,但我不知道如何在所有级别中循环并将结果输出到嵌套列表中。我看到了这些问题的单独解决方案,但我似乎无法使它们协同工作。如有任何帮助,我们将不胜感激。

PHP规范代码:

function list2html($list)
{
  $html = '';
  foreach ($list as $item)
  {
    $html .= '<li>' . $item['name'];
    if ( !empty($item['subpages']) ) // recurse here
      $html .= list2html($item['subpages']);
    $html .= '</li>';
  }
   return '<ul>' . $html . '</ul>';
}

像这样使用:

$html_output = list2html($aMenu);

注意URL丢失,您必须修改函数才能添加它们

Note2不需要递归,可以迭代(或用迭代模拟递归),它会更快但更复杂的代码

您必须制作递归函数,该函数将遍历一级数组,并为作为参数找到的每个数组调用self。