<?php 
$myArray = array( 
    0 => 'a', 
    1 => array('subA','subB',array(0 => 'subsubA', 1 => 'subsubB', 2 => array(0 => 'deepA', 1 => 'deepB'))),
     2 => 'b', 
    3 => array('subA','subB','subC'), 
    4 => 'c' 
); //从这里开始改为类的一个方法
$iterator = new RecursiveArrayIterator($myArray); 
iterator_apply($iterator, 'traverseStructure', array($iterator)); function traverseStructure($iterator) { 
    
    while ( $iterator -> valid() ) {         if ( $iterator -> hasChildren() ) { 
        
            traverseStructure($iterator -> getChildren()); 
            
        } 
        else { 
            echo $iterator -> key() . ' : ' . $iterator -> current() .PHP_EOL;   
         }         $iterator -> next(); 
    } 

?> 
基础不够扎实……递归脑筋打结了

解决方案 »

  1.   

    又不是作为回调函数,直接调就是了
    traverseStructure($iterator -> getChildren());
    ===>
    $this->traverseStructure($iterator -> getChildren());
      

  2.   


    ReturnType iterator_apply ( Traversable $iterator , callback $function [, array $args ] )
      

  3.   

    是回调函数啊
    iterator_apply 就是对迭代器调用函数但写进类我就搞不清关系了,总是这样那样问题
      

  4.   


    iterator_apply($iterator, array($objname, 'traverseStructure'), array($iterator));
      

  5.   

    我是想写成这样结构,调整多次都是出错,要么说参数没设定,要么说function不存在……
    <?php 
    $myArray = array( 
        0 => 'a', 
        1 => array('subA','subB',array(0 => 'subsubA', 1 => 'subsubB', 2 => array(0 => 'deepA', 1 => 'deepB'))),
         2 => 'b', 
        3 => array('subA','subB','subC'), 
        4 => 'c' 
    ); class myclass
    {
    function method($myarray)
    {
         $iterator = new RecursiveArrayIterator($myArray); 
         iterator_apply($iterator, 'traverseStructure', array($iterator));      function traverseStructure($iterator) { 
                while ( $iterator -> valid() ) { 
                     if ( $iterator -> hasChildren() ) { 
                     traverseStructure($iterator -> getChildren()); 
                } else { 
                     echo $iterator -> key() . ' : ' . $iterator -> current() .PHP_EOL;   
                } 
            $iterator -> next(); 
        } 

    ?> 
    $obj=new myclass();
    $obj->method($myArray);
      

  6.   

    闭包不是那么写的,我也写不好
    还是常规的吧class myclass {
      function method($myarray) {
        $iterator = new RecursiveArrayIterator($myArray); 
        iterator_apply($iterator, array($this, 'traverseStructure'), array($iterator)); 
      }
      function traverseStructure($iterator) { 
        while ( $iterator -> valid() ) { 
          if ( $iterator -> hasChildren() ) { 
            $this->traverseStructure($iterator -> getChildren()); 
          } else { 
            echo $iterator -> key() . ' : ' . $iterator -> current() .PHP_EOL;   
          } 
          $iterator -> next(); 
        } 
      }
      

  7.   

    我算是服了,过了一个晚上,看到的还是昨天的样子,从#2开始就看不到了……换了RecursiveIteratorIterator解决问题,但还是没搞清method内怎么用一个递归function