php:多态对数组对象的迭代器实现?
问题描述:
我不知道一个数组是否真的是一个PHP上的对象......但是,我想要的是在foreach循环中更改数组行为。php:多态对数组对象的迭代器实现?
事情与此类似java的:
for(String it : myArr = new Array_Iterator(array) implements Iterator{
public Array_Iterator(String[] arr){ this.arr = arr}
/* interface implementation */
}){
/* loop */
}
我真正想做到的是一种过滤器,让我没有得到从数组项,我不想
答
只需将数组包装到ArrayIterator中,您就可以*覆盖常规方法。 Spl提供了许多其他Iterators和Interfaces,您可能会觉得有用。要通过迭代器过滤数组,可以使用FilterIterator。从PHP手册
实施例:
<?php
// This iterator filters all values with less than 10 characters
class LengthFilterIterator extends FilterIterator {
public function accept() {
// Only accept strings with a length of 10 and greater
return strlen(parent::current()) > 10;
}
}
$arrayIterator = new ArrayIterator(array('test1', 'more than 10 characters'));
$lengthFilter = new LengthFilterIterator($arrayIterator);
foreach ($lengthFilter as $value) {
echo $value . "\n"; // ignores "test1" in array
}
答
您可能正在寻找PHP功能array_filter。
迭代在输入 阵列将它们传递给回调函数 中的每个值。如果回调函数 返回true,则将当前值从 输入返回到结果 数组中。数组键被保留。
如果你喜欢的迭代器为基础的方法,你也可以看看的Standard PHP Library (SPL),特别ArrayIterator结合FilterIterator。