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,如何从当前行获取前三行和后三行的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 中跳过 CSV 文件的前三行(使用 DoCmd?)

如何在mysql中选择前三行

java从list中取数,取前三行

excel怎么让前三行一直显示?

怎样获取Dataset的某些行

如何获得前三行的总和,然后是新列中的下三行