2012-08-28 70 views
1

我有csv文件(test.csv),並有如下文字:如何僅使用PHP獲取CSV文件的第二列?

1,maly,maly(),f,df 
2,cheata,aaa,df,df 
3,cheata,df,df,df 
4,maly,fc,cfv,f 
5,maly,df,fg,fg 
6,chantha,fc,gf,fg 
7,chantha,gh,a,g 
8,David,fgfd,dfg,g 

我想要什麼:

我只想diplay:maly cheata chantha David。對於有兩個名字以上是相同的,只需要one.And我有如下的PHP代碼:

$c=0; 
$data=fopen('test.csv','r'); 
while($row=fgets($data)){ 
if($c!=0){ 
echo $row[3]."<br>\n"; 
} 
$c++; 
} 

問題是

它不顯示我想要的。它顯示

H H一一H H一

我該如何解決這個問題?

回答

2

看起來你打算打電話給fgetcsv而不是fgets。此外,name指數會1然後,而不是3

<?php 

$file = fopen('test.csv', 'r'); 
while($row = fgetcsv($file)) { 
    if (isset($row[1])) { 
     echo $row[1], "\n"; 
    } 
} 
fclose($file); 
2

使用fgetcsv而不是fgets

if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     if (isset($data[1])) { 
      echo $data[1] . "<br>\n"; 
     } 
    } 
    fclose($handle); 
} 
+0

非常感謝您的anwser,它的工作原理,但它顯示:馬利CHEATA CHEATA馬裏馬裏chantha chantha David.For我想展示:maly cheata chantha David。請幫助我,謝謝, – user1606816

+0

@ user1606816選擇數據的規則是什麼? – xdazz

+0

我用你的代碼比它會顯示什麼,但我不想這樣顯示。 – user1606816

0

file方法返回數組中的所有行。 explode方法按特定分隔符分割一行。

$lines = file($file_name); 

$fields = array(); 
foreach ($lines as $line) { 
    $cells = explode(',', $line); 
    $fields[] = $cells[1]; 
} 

echo "<pre>"; 
print_r($fields); 
echo "</pre>"; 
+0

您可以在PHP_EOL中代替線條同樣爆炸。 – MaxPRafferty

+0

@MaxPRafferty我認爲你在談論'file_get_contents'。 'file'既可以*也可以*,它甚至可以'auto_detect_line_endings'(取決於設置),嚴格的'PHP_EOL'不會。 – EthanB

0

你的標題與你的問題不符,你想要第二列,而不是行。

首先,你得到每次你需要做這樣的事情(未測試)行的第4個字:

$data=fopen('test.csv','r'); 
while($row=fgets($data)){ 
    $cols = explode(',' $row); 
    echo $cols[1]."<br>\n"; 
} 
相關問題