当前位置:首页 > 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
}

基本实现示例

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

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

使用自定义迭代器

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

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

实现 Generator 的替代方案

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

php iterator 实现

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 接口:

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 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('lo…

php 实现自动收货

php 实现自动收货

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

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…