php:关于数组对象的迭代器实现的多态?

时间:2010-01-05 13:45:23

标签: php iterator polymorphism

我不知道数组是否真的是php上的对象...但是,我想要的是改变foreach循环中的数组行为。

与java类似的东西:

for( String it : myArr = new Array_Iterator( array) implements Iterator{
    public Array_Iterator( String[] arr){ this.arr = arr}
    /* interface implementation */
}){
    /* loop */
}

我真正想要实现的是一种过滤器,因此我不会从阵列中获取我不想要的条目

3 个答案:

答案 0 :(得分:3)

您可能正在寻找PHP函数array_filter

  

迭代输入中的每个值   数组将它们传递给回调   功能。如果是回调函数   返回true,来自的当前值   输入返回到结果中   阵列。数组键被保留。

如果您喜欢基于迭代器的方法,您还可以查看Standard PHP Library (SPL),特别是ArrayIteratorFilterIterator

答案 1 :(得分:2)

只需将数组包装到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
}

答案 2 :(得分:1)

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