2012-11-26 119 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

然后使用第二个示例:) –