为什么把getIterator这一段注释掉,也可以顺利往下执行排序,可以循环出来结果??

来源:3-2 ArrayIterator迭代器

慕仔9666172

2018-11-07 12:03

$arr = array(
    'name'=>'Danniel',
    'age'=>18,
    'sex'=>'boy',
    'tel'=>'13899999999',
    'city'=>'Beijing'
);
$it = new ArrayObject($arr);
//$it = $it->getIterator();
$it->ksort();
foreach ($it as $k=>$v){
    echo $k.'=>'.$v.PHP_EOL;
}
//print_r($it);

https://img3.mukewang.com/5be263db000193a203170164.jpg

加了getIterator方法和不加getIterator方法,执行效果一样啊,,这是怎么回事?

写回答 关注

2回答

  • tkkkk
    2019-02-14 17:48:14

    在迭代器才没有进行遍历【没有运行过$it->next();】的情况下,指针默认指向的是第一个元素,所以你不使指针归零【$it->rewind();】也可以从第一个开始迭代遍历。

    视频中,未加$it->rewind(); 没有遍历出东西的原因是,这个迭代器$it 在之前还被foreach遍历过一次使得他的指针到了最后一位。

  • 慕仔9666172
    2018-11-07 13:54:37
    //迭代器
    $arr = array(
        'name'=>'Danniel',
        'age'=>'18',
        'sex'=>'boy',
        'tel'=>'13899999999',
        'city'=>'Beijing'
    );
    $obj = new ArrayObject($arr);
    $it = $obj->getIterator();
    //$it->rewind();
    while ($it->valid()){
        echo $it->key().'=>'.$it->current().PHP_EOL;
        $it->next();
    }


    还有这段代码里面,把//$it->rewind();这一行注释掉了,居然也行执行啊??有谁试过吗?解释一下,


站在巨人的肩膀上写代码—SPL

SPL,一个能找到登上绝顶的天梯,学会后能提高实际工作的效率

22765 学习 · 108 问题

查看课程

相似问题