2

RecrusiveIteratorIteratorPHP でマルチレベルのメニューを構築するために、ページの多次元配列を繰り返し処理するのに苦労しています。

通常、レベルをループする関数を作成し、自分自身を呼び出して子をループします。しかし、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

That is normally a three step procedure:

  1. You implement a concrete RecursiveIterator that offers recursion iteration for your tree structure. It looks like that RecursiveArrayIterator is suiting your needs here.
  2. You iterate over it with a RecursiveIteratorIterator that is able to turn the recusion into your output (compare with RecursiveTreeIterator).
  3. You do the output by iterating with foreach over your more concrete RecursiveIteratorIterator.

Code Example:

   // 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 に答える