在csv文件中的stristr,只显示一次行

时间:2014-03-07 10:38:53

标签: php csv

我正在尝试搜索某些csv文件中的值,并显示包含该搜索字词的所有行,并使用以下代码:

<?php
    foreach (glob("csv/*.csv") as $file) {
        $filter = explode('/', $file);
        $filter = explode('.',$filter[1]);
        $filter = $filter[0];
        $rowcount = 0;
        $file = fopen($file, "r");
        while (($artext = fgetcsv($file)) !== false) {
          $line = ++$rowcount;

            foreach($artext as $value){
                if(stristr($value,'marketing')){print_r($artext);echo "<br />";}
            }
        }

        fclose($file);
    }
?>

但是,一行包含多次“营销”一词,因此该行显示4次(在本例中)。

如何确保每行只显示一次?

此示例中的行(但发生这种情况的行数更多):

Array(
    [0] = > http: //www.marketingmax.nl/ 
    [1] => Marketing Max 
    [2] => 
    [3] => username 
    [4] => password 
    [5] => Vergeet niet uit te loggen bij het beëindigen van je sessie. 
    [6] => Artikels over marketing, marketingcommunicatie, reclame 
    [7] => Kantienberg 
    [8] => BEM 
    [9] => marketing 
    [10] => 
    [11] => 
    [12] => Kluwer 
    [13] => 
    [14] => 
    [15] => Databank 
    [16] => 
    [17] => 
    [18] => 
)

更新:现在完整的工作代码是:

<?php
foreach (glob("csv/*.csv") as $file) {
  $filter = explode('/', $file);
  $filter = explode('.',$filter[1]);
  $filter = $filter[0];
  $rowcount = 0;
  $file = fopen($file, "r");
    while (($artext = fgetcsv($file)) !== false) {
      $line = ++$rowcount;
      if(stristr(implode("|", $artext),'marketing')){
      print_r($artext);
      }
    }
fclose($file);
}
?>

2 个答案:

答案 0 :(得分:0)

您可以使用:

while (($artext = fgetcsv($file)) !== false) {

    $line = ++$rowcount;
    if (array_search('marketing', $artext) !== false)
        print_r($artext);
}

如果您想要不区分大小写的搜索,请使用array_map

while (($artext = fgetcsv($file)) !== false) {

    $line = ++$rowcount;
    if (array_search('marketing', array_map('strtolower',$artext)) !== false)
        print_r($artext);
}

答案 1 :(得分:0)

您可以将整个数组加入一个字符串,然后查找匹配项。

if(stristr(implode("|", $artext),'marketing'))