2012-11-21 22 views
1

我目前在php中使用fgetcsv来获取CSV文件中的行。对于每一行,我需要它的前3行和后3行的某些要求。PHP的CSV,如何获取当前行的前3行和后3行

while(($data = fgetcsv($handle, 5000, ",")) !== FALSE) { 
    //$data is current row data 
    //I need previous rows and next rows data 
} 

我不知道该如何尝试这一点,因为每一次迭代将获得当前行的信息。

在fgetcsv循环中有什么可以实现的吗?我也打开这个问题的其他选择。

回答

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);  
    } 
} 
+0

不错,我会尝试。顺便说一句,你忘了增加'$索引' – Kalpesh

+0

谢谢。喜欢第二个想法,会尝试它。 – Kalpesh

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

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

你刚刚基本上复制了我的代码并且错误地修改了它。 – Ikke

+0

调试你的答案。 –