php数组/对象迭代器--ArrayIterator

2021-03-23

允许在遍历数组和对象时删除和更新值与键。当你想多次遍历相同数组时你需要实例化ArrayObject,然后让这个实例创建一个ArrayIteratror 实例,然后使用foreach或者手动调用getIterator() 方法。

创建数组/对象迭代器

$flags = [
    ArrayIterator::STD_PROP_LIST,  // 对象的属性在作为数组访问时具有正常的功能(var_dump, foreach等)。
    ArrayIterator::ARRAY_AS_PROPS, // 条目可以作为属性访问(读和写)
];
// 将数组或对象$array创建为迭代器
$arrayIterator = new ArrayIterator($array, $flag = 0);

迭代器转换数组

// 获取迭代器的数组副本
$arrayIterator->getArrayCopy();

迭代方法

// 获取迭代器当前元素
$arrayIterator->current();

// 获取迭代器当前元素的键
$arrayIterator->key();

// 迭代器前进到下一元素
$arrayIterator->next();

// 迭代器倒回到开头
$arrayIterator->rewind();

// 检查迭代器是否还有元素项
$arrayIterator->valid();

// 跳过迭代器$index索引的元素
$arrayIterator->offsetUnset($index);

迭代器值设置与获取

// 向迭代器尾部插入一个值
$arrayIterator->append($value);

// 将索引$index的值设置为$newval,索引不存在时新增索引与值
$arrayIterator->offsetSet($index, $newval);

// 获取索引$index的值
$arrayIterator->offsetGet($index);

验证元素是否存在

// 检查索引$inde是否存在与迭代器
$arrayIterator->offsetExists($index);

统计迭代器元素数量

// 获取迭代器的元素的数量
$arrayIterator->count();

排序

$sort_flags = [
    SORT_REGULAR,        // 正常比较元素
    SORT_NUMERIC,        // 元素被作为数字来比较
    SORT_STRING,         // 元素元被作为字符串来比较
    SORT_LOCALE_STRING,  // 根据当前的区域(locale)设置来把单元当作字符串比较,可以用setlocale()来改变当前区域。
    SORT_NATURAL,        // 类似natsort()对每个元素以“自然的顺序”对字符串进行排序。
    SORT_FLAG_CASE,      // 能够与SORT_STRING或SORT_NATURAL合并(使用|位运算合并),不区分大小写排序字符串。
];

// 根据值将迭代器正向排序
$arrayIterator->asort($flags = SORT_REGULAR);

// 根据键将迭代器正向排序
$arrayIterator->ksort($flags = SORT_REGULAR);

// 使用“自然顺序”算法,根据值将迭代器正向排序,不区分大小写
$arrayIterator->natcasesort();

// 使用“自然顺序”算法,根据值将迭代器正向排序
$arrayIterator->natsort();

// 使用自定义回调$cmp_function对元素排序,保持索引与其关联值的相关性
// $cmp_function的两个参数为迭代器的元素,在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于0的整数
$arrayIterator->uasort($cmp_function);

// 使用自定义回调$cmp_function对元素排序
// $cmp_function的两个参数为迭代器的元素,在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于0的整数
$arrayIterator->uksort($cmp_function);

序列化

// 返回迭代器序列化后的值
$arrayIterator->serialize();

// 将$serialized反序列化后设置为当前迭代器
$arrayIterator->unserialize($serialized);

标志设置获取

// 设置迭代器的标志
$arrayIterator->setFlags($flags);

// 获取迭代器设置的标志
$arrayIterator->getFlags();

 

{/if}