Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用递归迭代器生成多级HTML菜单?_Php_Html_Recursion_Iterator_Spl - Fatal编程技术网

Php 如何使用递归迭代器生成多级HTML菜单?

Php 如何使用递归迭代器生成多级HTML菜单?,php,html,recursion,iterator,spl,Php,Html,Recursion,Iterator,Spl,我很难让我的头在RecrusiveIteratorIterator和亲戚们迭代一个多维页面数组以在PHP中构建一个多级菜单 通常我只是创建一个在某个级别上循环的函数,并调用它自己在任何子级上循环。但是我想利用PHP中的迭代器接口来改进代码 我的数组如下所示: $pages = array( new Page(1, 'Home'), new Page(2, 'Pages', array( new Page(3, 'About'), new Page(

我很难让我的头在
RecrusiveIteratorIterator
和亲戚们迭代一个多维页面数组以在PHP中构建一个多级菜单

通常我只是创建一个在某个级别上循环的函数,并调用它自己在任何子级上循环。但是我想利用PHP中的迭代器接口来改进代码

我的数组如下所示:

$pages = array(
    new Page(1, 'Home'),
    new Page(2, 'Pages', array(
        new Page(3, 'About'),
        new Page(4, 'Contact')
    )),
    new Page(5, 'Categories', array(
        new Page(6, 'Clothing'),
        new Page(7, 'DVDs')
    ))
);
我的
页面
构造函数中的参数只是页面ID和页面名称

我如何使用PHP的迭代器构建一个如下所示的菜单

<ul>
  <li>Home</li>
  <li>Pages
    <ul>
      <li>About</li>
      <li>Contact</li>
    </ul>
  </li>
  <li>Categories
    <ul>
      <li>Clothing</li>
      <li>DVDs</li>
    </ul>
  </li>
</ul>
  • 页数
    • 关于
    • 接触
  • 类别
    • 服装
    • DVD

这通常是一个三步程序:

  • 您实现了一个为树结构提供递归迭代的具体方法。看起来这正适合你的需要
  • 您可以使用一个可以将递归转换为输出(与进行比较)的方法对其进行迭代
  • 通过在更具体的
    recursiveiterator
    上使用
    foreach
    进行迭代来完成输出
  • 代码示例:

       // consume implementation of step 1
       $it = new PagesRecursiveIterator($pages);
    
       // consume implementation of step 2
       $list = new RecursiveUlLiIterator($it);
    
       // perform iteration given in step 3
       foreach($list as $page) {
           echo $page->getName();
       }
    
    对于您的特定问题,请参见此处的答案:另请参见: