2015-12-02 276 views
0

我有一個簡單的CSV文件看起來像這樣:PHP讀取從CSV文件

Value: 
AAA 
Value: 
BBB 
Value: 
AAA 

我想算的次數一定值顯示出來(如AAA)。 首先,我想上面寫着「值:」行。,只是呼應了以下行「行[$ I + 1]這將是相應的值 下面的代碼:

<?php 

$file_handle = fopen("rowa.csv", "r"); 

$i = 0; 

while (!feof($file_handle)) { 

$line_of_text = fgetcsv($file_handle, 1024); 

$line[$i] = $line_of_text[0]; 


if($line[$i] == "Value:"){ 

echo $line[$i+1]."<br />"; 

} 

$i++; 
} 

fclose($file_handle); 

?> 

的結果應該是這樣的:

AAA 
BBB 
AAA 

不幸的是,這並不work..It只是給了我「< * BR /」>取值

回答

-1

由於PHP.net例如提供,你可以使用這個修改後的代碼:

<?php 
    $count = 0; 

    if (($handle = fopen("test.csv", "r")) !== FALSE) 
    { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
     { 
      $num = count($data); 

      for ($c=0; $c < $num; $c++) 
      { 
       if (!strcmp($data[$c], 'Value:')) continue; 
       if (!strcmp($data[$c], 'AAA')) $count++; 

       echo $data[$c] . "<br />\n"; 
      } 
     } 

     fclose($handle); 
    } 
?> 

UPDATE

試試這個新的代碼,我們使用的值數組鍵,並增加該「鍵」的計數。

<?php 
    $counts = array(); 

    if (($handle = fopen("test.csv", "r")) !== FALSE) 
    { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
     { 
      $num = count($data); 

      for ($c=0; $c < $num; $c++) 
      { 
       if (strcmp($data[$c], 'Value:')) 
       { 
        if (!isset($counts[$data[$c]])) 
        { 
         $counts[$data[$c]] = 0; 
        } 

        $counts[$data[$c]]++; 
       } 

       else 
       { 
        // Do something 
       } 
      } 
     } 

     fclose($handle); 
    } 

    var_dump($counts); 
?> 

可以打印數組是這樣的:

foreach ($counts as $key => $count) 
{ 
    printf('%s: %d<br/>' . "\n", $key, $count); 
} 
+0

謝謝,但我不能硬編碼「AAA」..我不知道這些值 – Antares

+0

只是一個例子,你的問題不是很清楚。你想做什麼?對_word_的每個實例進行計數,或者對每個_word_重複進行計數,除了「Value:」?還提供有效的真實CSV文件示例。 –

+0

我的最終輸出將是:AAA:2,BBB:1 – Antares

0

如果在命令行或文件進行打印,你需要使用\ n而不是<br/>。這隻適用於你的輸出是HTML。每次你想移動兩行。邏輯應該是這樣的:

if($line[$i] == "Value:"){ 
    echo $line[$i+1]."\n"; // add a new line 
} 
$i+=2; // you want to move two lines 
+0

對不起,沒有任何改變。 – Antares

+0

我剛剛更新了我的答案..你嘗試過嗎?你在輸出html嗎? – tanjir

+0

謝謝,但爲什麼我應該跳兩個? – Antares

0

這看起來並不像一個正常的日常CSV文件,但在這裏,應該工作的例子。

$fh  = fopen('rowa.csv', 'r'); 
$OUT = array(); 
$C  = 0; 
while(! feof($fh)) { 
    // read 1 line, trim new line characters. 
    $line = trim(fgets($fh, 1024)); 
    // skip empty lines 
    if (empty($line)) continue; 
    // if it's a value line we increase the counter & skip to next line 
    if($line === 'Value:') { 
     $C++; 
     continue; 
    } 
    // append contents to array using the counter as an index 
    $OUT[$C] = $line; 
} 
fclose($fh); 
var_dump($OUT); 
0

這不是一個CSV文件。 file()命令會將文件的行加載到數組中。 for循環每隔兩行打印一次。

$lines = file("thefile.txt"); 
for ($i = 1; $i < count($lines); $i = $i + 2) { 
    echo $lines[$i] . "<br/>" . PHP_EOL; 
}