当前位置:首页 > PHP

php iterator 实现

2026-01-29 15:33:02PHP

实现 PHP Iterator 接口

在 PHP 中,可以通过实现 Iterator 接口来创建自定义的可迭代对象。Iterator 接口定义了以下方法:

Iterator extends Traversable {
    public current(): mixed
    public key(): mixed
    public next(): void
    public rewind(): void
    public valid(): bool
}

基本实现示例

创建一个简单的迭代器类,遍历一个数组:

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]);
    }
}

使用自定义迭代器

$data = ['apple', 'banana', 'cherry'];
$iterator = new MyIterator($data);

foreach ($iterator as $key => $value) {
    echo "Key: $key, Value: $value\n";
}

实现 Generator 的替代方案

PHP 5.5+ 提供了生成器(Generator)作为更简单的迭代器实现方式:

function myGenerator(array $array) {
    foreach ($array as $key => $value) {
        yield $key => $value;
    }
}

$data = ['apple', 'banana', 'cherry'];
foreach (myGenerator($data) as $key => $value) {
    echo "Key: $key, Value: $value\n";
}

实现 IteratorAggregate 接口

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

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";
}

实现 SeekableIterator 接口

如果需要随机访问功能,可以实现 SeekableIterator 接口:

php iterator 实现

class MySeekableIterator implements SeekableIterator {
    private $array = [];
    private $position = 0;

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

    public function seek($position) {
        if (!isset($this->array[$position])) {
            throw new OutOfBoundsException("Invalid position ($position)");
        }
        $this->position = $position;
    }

    // 实现其他 Iterator 方法...
}

注意事项

  • 迭代器对象在遍历后不会自动重置,需要手动调用 rewind() 或重新创建实例
  • 生成器函数只能使用一次,遍历完成后需要重新调用生成器函数
  • 对于大型数据集,生成器可以节省内存,因为它们不需要一次性加载所有数据

标签: phpiterator
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…