// 加载PHPExcel库require_once 'PHPExcel/PHPExcel.php';// 加载Excel文件$excel = PHPExcel_IOFactory::load("example.xlsx");// 选择第一个工作表$sheet = $excel->getActiveSheet();// 获取表格的行数和列数$highestRow = $sheet->getHighestDataRow();$highestColumn = $sheet->getHighestDataColumn();// 遍历表格每一行数据for ($row = 1; $row <= $highestRow; $row++) { // 获取单元格迭代器 $cellIterator = $sheet->getRowIterator($row)->getCellIterator(); // 遍历每一个单元格并获取数据 foreach ($cellIterator as $cell) { $data = $cell->getValue(); // 处理单元格数据 // ... }}使用yield改进下
时间: 2023-08-13 21:04:22 浏览: 158
很好,您想要使用 yield 来优化这段代码,那我可以给您一些思路。
首先,您可以将遍历表格每一行数据的 for 循环改为一个 while 循环。每次遍历完一行数据后,使用 yield 将该行数据返回。这样,后面调用该函数时,可以使用 foreach 循环遍历每一行数据,而且不用等待所有行遍历完才开始处理数据。
代码如下所示:
```
function iterateExcelRows($filename)
{
$excel = PHPExcel_IOFactory::load($filename);
$sheet = $excel->getActiveSheet();
$highestRow = $sheet->getHighestDataRow();
$highestColumn = $sheet->getHighestDataColumn();
$row = 1;
while ($row <= $highestRow) {
$cellIterator = $sheet->getRowIterator($row)->getCellIterator();
$data = [];
foreach ($cellIterator as $cell) {
$data[] = $cell->getValue();
}
yield $data;
$row++;
}
}
// 使用示例
foreach (iterateExcelRows("example.xlsx") as $row) {
// 处理每一行数据
}
```
使用 yield 可以避免一次性将所有数据读取到内存中,而是在需要的时候才进行读取和处理。这样不仅减小了程序的内存使用量,而且也可以提高程序的效率。希望这段代码可以对您有所帮助。
阅读全文