PHP使用迭代器Iterator读取大容量文本文件

Posted SuperAvalon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP使用迭代器Iterator读取大容量文本文件相关的知识,希望对你有一定的参考价值。

某度早期php简易面试题,用php处理大容量文件,比如内存只有100m,要处理2G的文本文件,php怎么办?

可以通过fgets函数来逐行读取,然后通过Iterator来实现一个迭代器,方便遍历,

分享下代码:

<?php

class Reader implements Iterator 
    
    private $num;
    
    private $handler;
    
    public function __construct($file)
    
        $this->handler = fopen($file, "r");
    
    
    
    public function __destruct()
    
        fclose($this->handler);
    
    
    public function current()
    
        return fgets($this->handler, 2048);
    
    
    public function next()
    
        $this->num++;
    
    
    public function key()
    
        return $this->num;
    
    
    public function valid()
    
        return !feof($this->handler);
    
    
    public function rewind()
    
        fseek($this->handler, 0);
        
        $this->num = 1;
    


$file = __FILE__;

$reader = new Reader($file);

foreach ($reader as $k => $v) 
    echo $k ."\\t\\t" . $v . "\\r\\n";

 

以上是关于PHP使用迭代器Iterator读取大容量文本文件的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )

Kotlin 协程Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )

PHP迭代器

PHP迭代器

php 利用迭代器遍历文件夹

PHP迭代器Iterator接口