PHP CSV,如何从当前行获取上一行和后三行

时间:2012-11-21 10:40:06

标签: php csv

我目前在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循环中实现这一点吗?我也愿意为这个问题寻找其他替代方案。

3 个答案:

答案 0 :(得分: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]。在尝试访问之前,请务必检查该行是否存在。例如,第一行不会有任何前一行。

答案 1 :(得分:2)

您必须自己存储这些行。

我会做这样的事情:

$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);    
    }
}

答案 2 :(得分:0)

$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++;
}