当前位置:首页 > 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 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php 购物车实现session

php 购物车实现session

PHP 购物车实现(基于 Session) 在 PHP 中,使用 Session 实现购物车功能是一种常见方法。Session 可以跨页面存储用户数据,适合临时保存购物车信息。 初始化 Sessio…