代码之家  ›  专栏  ›  技术社区  ›  Augusto Hack

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

  •  2
  • Augusto Hack  · 技术社区  · 15 年前

    我不知道数组是否真的是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 回复  |  直到 15 年前
        1
  •  2
  •   Gordon Haim Evgi    15 年前

    把数组包装成 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
    }
    
        2
  •  3
  •   Corey Ballou    15 年前

    您可能正在寻找php函数 array_filter .

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

    如果您喜欢基于迭代器的方法,还可以查看 Standard PHP Library (SPL) ,尤其是 ArrayIterator FilterIterator .

        3
  •  1
  •   avpx    15 年前

    如果您想要的是一种数组元素过滤器,请尝试 array_filter . 如果要保留元素,则生成返回true的函数;如果不保留元素,则生成返回false的函数,然后将其传递给 array_filter .