PHP CSV,如何从当前行获取前三行和后三行
Posted
技术标签:
【中文标题】PHP CSV,如何从当前行获取前三行和后三行【英文标题】:PHP CSV, how to get previous and next 3 rows from current row 【发布时间】:2012-11-21 10:40:06 【问题描述】:我目前在 php 中使用 fgetcsv 来获取 CSV 文件中的行。对于每一行,我需要前 3 行和下 3 行来满足某些要求。
while(($data = fgetcsv($handle, 5000, ",")) !== FALSE)
//$data is current row data
//I need previous rows and next rows data
我不知道如何尝试,因为每次迭代都会获得当前行的信息。
有什么我们可以在 fgetcsv 循环中实现的吗?我也愿意为这个问题提供其他替代方案。
【问题讨论】:
【参考方案1】:您必须自己存储这些行。
我会这样做:
$rows = array();
$index = 0;
while(($data = fgetcsv($handle, 5000, ",")) !== FALSE)
$rows[] = $data;
if($index >= 6)
$currentIndex = $index - 4;
$currentRow = $rows[$currentIndex];
//Do something with $rows[$currentRowIndex +- 3];
$index++;
如果数据太大而无法全部存储在数组中,您也可以选择最多只存储 7 行,并在第 4 行进行操作:
$rows = array();
while(($data = fgetcsv($handle, 5000, ",")) !== FALSE)
$rows[] = $data;
if(count($rows) == 7)
$currentRow = $rows[4];
//Do something with $rows[0-6];
array_shift($rows);
【讨论】:
很好,我会试试的。顺便说一句,你忘了增加$index
【参考方案2】:
将数据添加到数组中,然后使用for
循环:
$myData = array();
while(($data = fgetcsv($handle, 5000, ",")) !== FALSE)
$myData[] = $data;
for($i=0; $i<count($myData); $i++)
// $myData[$i] is the current row
在for
循环中,您可以对$i
进行加法或减法以获取任意行。所以对于下一行,$myData[$i+1]
,或者之后的下一行$myData[$i+2]
。
前面的行也是如此:$myData[$i-1]
。请务必在尝试访问之前检查该行是否存在。例如,第一行不会有任何先前的行。
【讨论】:
【参考方案3】:$rows = array();
$index = 0;
while(($data = fgetcsv($handle, 5000, ",")) !== FALSE)
$rows[] = $data;
if($index >= 5)
$currIndex = $index - 4;
$previousIndex = $currIndex - 1;
$nextIndex = $currIndex + 3;
if(isset($rows[$nextIndex]) && isset($rows[$previousIndex]))
$nextRow = $rows[$nextIndex];
$prevRow = $rows[$previousIndex];
$index++;
【讨论】:
以上是关于PHP CSV,如何从当前行获取前三行和后三行的主要内容,如果未能解决你的问题,请参考以下文章