2

我很难让我的头脑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>
4

1 回答 1

1

这通常是一个三步程序:

  1. 你实现了一个RecursiveIterator为你的树结构提供递归迭代的混凝土。看起来这RecursiveArrayIterator很适合您的需求。
  2. RecursiveIteratorIterator您使用能够将recusion 转换为输出的 a 对其进行迭代(与 比较RecursiveTreeIterator)。
  3. 您可以通过遍历foreach更具体的RecursiveIteratorIterator.

代码示例:

   // 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();
   }
于 2012-10-10T12:24:35.847 回答