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提供了许多其他IteratorsInterfaces,您可能会觉得有用。要通过迭代器过滤数组,可以使用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

如果你想要的是一种数组元素的过滤器,请尝试array_filter。创建一个函数,如果要保留该元素,则返回true,否则返回false,然后将其传递到array_filter