2012-11-26 115 views
2

我希望你能幫助我處理這個尷尬的問題。 我想從csv文件中的所有行中獲取一定的值,直到in_array()才能正常工作。in_array問題,返回false

CSV文件看起來是這樣的:

Mach Vu,11-25-2012 21:32:39,row1 
Mach Vu,11-25-2012 21:32:46,row2 

我想從每行(即 'ROW1', '2行')最後一個值。

這裏是我的代碼:

$i = 1; 

foreach($array2 as $key=>$value) { 
    foreach($array2[$key] as $value2) { 
     if($i % 3 == 0) { 
      $array3[] = $value2; 
     } 
     $i++; 
    } 
} 
print_r($array3); 
echo "<br />"; 


if(in_array("row1", $array3)) {echo "yes";} else {echo "no";} 

陣列3印刷:

Array ( 
    [0] => row1 
    [1] => row2 
) 

預先感謝幫助!祝一切順利 !

回答

2

這可以爲您解決,同時還修剪了你的代碼位。

我的猜測是,in_array不會因工作,額外的空白,從而加入TRIM()

foreach ($array2 as $key => $value) { 
    $array3[] = trim($array2[$key][count($array2[$key])-1]); 
} 

print_r($array3); 
echo "<br />";  
echo in_array("row1", $array3) ? "yes" : "no"; 
+0

太棒了! Thx這麼多,它的工作。你能告訴我爲什麼在我的代碼中它不工作嗎?再次感謝 –

+0

這是由於CSV中多餘的空白。添加'trim()'可以消除數據上的任何額外空白。 –

+0

我已經檢查過多次空格,這一切都很好,但我相信這就是原因。不管怎樣,再次感謝您的幫助。高度讚賞! –

1

如何簡單些?

$s = "Mach Vu,11-25-2012 21:32:39,row1"; 
$parsed_string = str_getcsv($s); 
print $parsed_string[2]; 

這將打印row1。請參閱str_getcsv的文檔。

如果你正在讀一個文件,那就試試這個(從在fgetcsv manual page樣品):

if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $array3[] = $data[2]; 
    } 
} 
fclose($handle); 

if (in_array("row1",$array3)) { 
    print "yes"; 
} 
+0

好吧,我一個PHP新手,所以我必須要問你,如果我有什麼數百行那樣? –

+0

而我正在尋找爲什麼in_array在這種情況下無法正常工作的答案? thx爲您的幫助 –

+0

然後使用第二個示例:) –