允许在遍历数组和对象时删除和更新值与键。当你想多次遍历相同数组时你需要实例化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();