当前位置:首页 > PHP

php iterator 实现

2026-02-14 13:35:28PHP

PHP Iterator 实现

在 PHP 中,Iterator 是一种接口,允许对象被用于 foreach 循环。实现 Iterator 接口需要定义五个方法:current(), key(), next(), rewind(), 和 valid()

基本 Iterator 实现

以下是一个简单的 Iterator 实现示例,用于遍历数组:

php iterator 实现

class MyIterator implements Iterator {
    private $array = [];
    private $position = 0;

    public function __construct(array $array) {
        $this->array = $array;
        $this->position = 0;
    }

    public function rewind() {
        $this->position = 0;
    }

    public function current() {
        return $this->array[$this->position];
    }

    public function key() {
        return $this->position;
    }

    public function next() {
        ++$this->position;
    }

    public function valid() {
        return isset($this->array[$this->position]);
    }
}

使用 Iterator

实现后,可以通过 foreach 循环遍历对象:

$iterator = new MyIterator(['apple', 'banana', 'cherry']);
foreach ($iterator as $key => $value) {
    echo "$key: $value\n";
}

IteratorAggregate 实现

对于更复杂的场景,可以使用 IteratorAggregate 接口,它只需要实现一个方法 getIterator()

php iterator 实现

class MyCollection implements IteratorAggregate {
    private $items = [];

    public function addItem($item) {
        $this->items[] = $item;
    }

    public function getIterator() {
        return new ArrayIterator($this->items);
    }
}

$collection = new MyCollection();
$collection->addItem('apple');
$collection->addItem('banana');

foreach ($collection as $item) {
    echo $item . "\n";
}

自定义迭代逻辑

可以通过实现 Iterator 接口来自定义迭代逻辑,例如过滤或转换数据:

class FilterIterator implements Iterator {
    private $array;
    private $position = 0;
    private $filter;

    public function __construct(array $array, callable $filter) {
        $this->array = array_values($array);
        $this->filter = $filter;
    }

    public function rewind() {
        $this->position = 0;
    }

    public function current() {
        return ($this->filter)($this->array[$this->position]);
    }

    public function key() {
        return $this->position;
    }

    public function next() {
        ++$this->position;
    }

    public function valid() {
        return isset($this->array[$this->position]);
    }
}

$numbers = [1, 2, 3, 4];
$filtered = new FilterIterator($numbers, function($n) { return $n * 2; });

foreach ($filtered as $value) {
    echo $value . "\n"; // 输出 2, 4, 6, 8
}

内置迭代器类

PHP 提供了多种内置的迭代器类,例如:

  • ArrayIterator: 用于遍历数组。
  • FilterIterator: 用于过滤数据。
  • LimitIterator: 用于限制遍历范围。
$array = new ArrayIterator([1, 2, 3, 4]);
$filtered = new CallbackFilterIterator($array, function($value) {
    return $value % 2 == 0;
});

foreach ($filtered as $value) {
    echo $value . "\n"; // 输出 2, 4
}

通过实现 Iterator 接口或使用内置迭代器类,可以灵活地控制对象的遍历行为。

标签: phpiterator
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (in…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searc…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…