【问题标题】:How to use RecursiveIteratorIterator to generate a multi-level HTML menu?如何使用 RecursiveIteratorIterator 生成多级 HTML 菜单?
【发布时间】:2012-10-10 12:13:59
【问题描述】:

我很难理解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')
    ))
);

Page 构造函数中的参数只是页面 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>

【问题讨论】:

标签: php html recursion iterator spl


【解决方案1】:

这通常是一个三步程序:

  1. 您实现了一个具体的RecursiveIterator,它为您的树结构提供递归迭代。看起来RecursiveArrayIterator 在这里满足您的需求。
  2. 您使用RecursiveIteratorIterator 对其进行迭代,该RecursiveIteratorIterator 能够将recusion 转换为您的输出(与RecursiveTreeIterator 相比)。
  3. 您可以通过在更具体的 RecursiveIteratorIterator 上迭代 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();
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2020-09-22
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多