无限分类的树状迭代方法

 用RecursiveIteratorIterator类来实现,详见代码:

PHP代码
  1. <?php header('Content-Type: text/html; charset=utf-8');?>  
  2.    
  3. <style>  
  4.    
  5.     ul {list-style-type: circle}  
  6.    
  7. </style>  
  8.    
  9. <?php  
  10. $array = array(   
  11.     "苹果" => array (   
  12.         "一代" => array(   
  13.             "苹果1""苹果1S"   
  14.         ),   
  15.         "二代" => array(   
  16.             "苹果2"array(   
  17.             "苹果2 8G","苹果2 16G"   
  18.         ),   
  19.         ),   
  20.         "三代" => array()   
  21.     ),  
  22.     "三星" => array(   
  23.             "galaxy S4""galaxy S5"   
  24.         ),   
  25. );  
  26.    
  27. class RecursiveListIterator extends RecursiveIteratorIterator {   
  28.    
  29.     public $tab = " ";   
  30.    
  31.     public function beginChildren() {   
  32.         if (count($this->getInnerIterator()) == 0) { return; }   
  33.         echo str_repeat($this->tab, $this->getDepth()), "<ul>
    "
    ;   
  34.     }   
  35.    
  36.     public function endChildren() {   
  37.         if (count($this->getInnerIterator()) == 0) { return; }   
  38.         echo str_repeat($this->tab, $this->getDepth()), "</ul>
    "
    ;   
  39.         echo str_repeat($this->tab, $this->getDepth()), "</li>
    "
    ;   
  40.     }   
  41.    
  42.     public function nextElement() {   
  43.         // 显示叶子节点  
  44.         if ( ! $this->callHasChildren()) {   
  45.             echo str_repeat($this->tab, $this->getDepth()+1), '<li>'$this->current(), "</li>
    "
    ;   
  46.             return;   
  47.         }   
  48.    
  49.         // 显示分支标签   
  50.         echo str_repeat($this->tab, $this->getDepth()+1), '<li>'$this->key();   
  51.         echo (count($this->callGetChildren()) == 0) ? "</li>
    "
     : "
    "
    ;   
  52.     }   
  53. }   
  54.    
  55. $it = new RecursiveListIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::SELF_FIRST); &

发表评论

电子邮件地址不会被公开。 必填项已用*标注