SPL常用迭代器

qq%e5%9b%be%e7%89%8720170521232013

ArrayIterator

  • 熟悉使用seek()跳过元素
  • 熟悉使用asort,ksort排序
<?php

$fruits =  array(
        'apple'=>'apple value',
        'orange' => 'orange value',
        'grape' => 'grape value',
        'pear' => 'pear value'
    );

print_r($fruits);//打印数组
echo '*******user fruits directly'.PHP_EOL;
foreach ($fruits as $key => $value) {
    # code...
    echo $key.':'.$value.PHP_EOL;
}
//使用ArrayIterator遍历数组
$obj = new ArrayObject($fruits);
$it = $obj -> getIterator();//获得迭代器
echo '*******user ArrayIterator in for'.PHP_EOL;
foreach ($it as $key => $value) {
    # code...
    echo $key.':'.$value.PHP_EOL;
}
echo '*******user ArrayIterator in while'.PHP_EOL;
$it -> rewind();//调用current之前一定要先调用rewind
while ($it -> valid()) {
    echo $it -> key().':'.$it->current().PHP_EOL;
    $it -> next();//这个必须加上,要不然死循环
}

//跳过某些元素进行打印
echo '*******user seek before while'.PHP_EOL;
$it ->rewind();
if($it->valid()){
    $it->seek(1);//跳过第一个元素
    while ($it -> valid()) {
        echo $it -> key().':'.$it->current().PHP_EOL;
        $it -> next();//这个必须加上,要不然死循环
    }
}
echo '*******user ksort'.PHP_EOL;
$it->ksort();//对key字典排序
foreach ($it as $key => $value) {
    # code...
    echo $key.':'.$value.PHP_EOL;
}
echo '*******user asort'.PHP_EOL;
$it->asort();//对value字典排序
foreach ($it as $key => $value) {
    # code...
    echo $key.':'.$value.PHP_EOL;
}

AppendIterator

  • 能陆续遍历几个迭代器
  • -按顺序迭代几个不同的迭代器,例如,希望在一次循环中迭代访问两个或多个组合
<?php

$array_a = new ArrayIterator(array('a','b','c','d'));

$array_b = new ArrayIterator(array('e','f','e','g'));

$it = new AppendIterator();
$it ->Append($array_a);
//通过append方法把迭代器对象添加到AppendIterator对象中
$it -> append($array_b);
foreach ($it as $key => $value) {
    # code...
    echo $value.PHP_EOL;
}

MultipleIterator

  • 一个迭代器,依次遍历所有附加的迭代器
  • 用于把多个Iterator里面的数据组合成一个整体来访问
<?php
 ini_set('display_errors', '1');
 error_reporting(E_ALL);
$id_iter = new ArrayIterator(array('01','02','03'));

$name_iter = new ArrayIterator(array('张三','李四','王五'));

$age_iter = new ArrayIterator(array('21','22','23'));

$mit = new MultipleIterator (MultipleIterator::MIT_KEYS_ASSOC);

$mit -> attachIterator($id_iter,'ID');

$mit -> attachIterator($name_iter,'name');
$mit -> attachIterator($age_iter,'age');

foreach ($mit as $key => $value) {
    # code...
    print_r($value);
}

FilesystemIterator

遍历文件系统

<?php
//显示当前目录下的所有文件、大小、创建时间

$it = new FileSystemIterator('.');
date_default_timezone_set('PRC');
foreach ($it as $key => $file_info){
    # code...
    printf('%s\t%s\t%8s\t%s\n',
           date('Y-m-d H:i:s',$file_info->getMTime()),
           $file_info->isDir() ? "<dir>" : '',
           number_format($file_info->getsize()),
           $file_info->getFileName()
          );
}

猜你喜欢

转载自www.cnblogs.com/xiaobingch/p/12464538.html