请注意,ArrayIterator
该类实现了ArrayAccess
. 要修改数组,只需将 $this 视为一个数组:
$this['k'] = 'v';
不幸的是,诸如此类的函数in_array
不适用于类似数组的对象。你需要一个实际的数组。 getArrayCopy()
会工作,但我只会使用(array) $this
.
编辑:作为评论中的 salathe 注释,getArrayCopy()
更好,因为它总是获取内部数组,而(array) $this
如果您使用STD_PROP_LIST
标志,则行为会有所不同。
在性能方面,制作这样的数组副本确实会导致小幅减速。作为基准,我尝试了一个包含 1000000 个项目的 ArrayIterator,在我的机器上都花了大约 0.11 秒getArrayCopy()
。另一方面,操作本身(在结果数组上)花费了 0.011 秒 - 大约是十分之一的时间(array)
。in_array
我也试过这个版本的in_array
功能:
class Test extends ArrayIterator {
public function in_array($key) {
foreach($this as $v)
if($v == $key)
return true;
return false;
}
}
当搜索一个不存在的值时,该函数在我的机器上运行 0.07 秒,这是该算法的最坏情况。
The performance problems are too small to matter in most cases. If your situation is extreme enough that 100 nanoseconds or so per array element actually make a difference, then I would suggest putting the values you want to search for in the array keys and using offsetExists()
instead.