php循环两个数组并比较数据

时间:2012-09-28 17:07:28

标签: php arrays multidimensional-array

我尝试比较两个数组。第一个数组来自我的csv文件,第二个是$ a - 数组。如果没有与csv第2列($ line 1中相同的值),我尝试获取csv数据并从$ a数组数据中再添加一列,然后显示'empty'

现在它只显示数组中的第一个值 - > a(102019)其他值显示'空';

看到一切都很好但阵列一个不循环只有一次,我错了?请告诉我......我今天花了一整天但没有找到。

<?php
    ////////////////////////////////////////////////////////////

    $file_path="".$_SERVER["DOCUMENT_ROOT"]."/upload/111.csv";

    ////////////////////////////////////////////////////////////

    $a = array('102019','102401','102403','102027','102115','102402','102027');

    function get_array_from_csv($file,$delimiter) {
      if (($handle = fopen($file, "r")) !== FALSE) {
        $i = 0;
        while (($lineArray = fgetcsv($handle, 4000, $delimiter)) !== FALSE) {
          for ($j=0; $j<count($lineArray); $j++) {
            $data2DArray[$i][$j] = $lineArray[$j];
          }
          $i++;
        }
        fclose($handle);
      }
      return $data2DArray;
    }

    function search($a, $line) {
        foreach($a as $mas_value) {
            if (substr($line[1], 2) == $mas_value) {
              $file = $mas_value;
            } else {
              $file = 'empty';
            }
            return $file;
        }
    }

    $data = get_array_from_csv($file_path, ';');

    echo '<table>';
    foreach ($data as $line) {

      $file = search($a, $line);

      echo '<tr>
        <td>'.$line[0].'</td>
        <td>'.$line[1].'</td>
        <td>'.$line[2].'</td>
        <td>'.$line[3].'</td>
        <td>'.$line[4].'</td>
        <td>'.$line[5].'</td>
        <td>'.$file.'</td>
      </tr>';
    }    
    echo '</table>';

    ?>

这是我的输出数据:

ALFA ROMEO  BP102401    156 LIM 4D  1997-   20,00       empty
    BP102402    156 SPORT WAGON     2000-   20,00       empty
    BP102403    156 SPORT WAGON ar ugunsdzeЕЎ.  2000-   20,00       empty
    BP102404    159 -SW     2006-   22,00       empty
AUDI    BP102023    A 1     2010-   22,00       empty
    BP102023    A 1 Sportback   2010-   22,00       empty
    BP102001    A 2     2000-2005   15,00       empty
    BP102010    A 2 German  2000-2005   15,00       empty
    BP102002    A 3 HB  1996-2003   20,00       empty
    BP102013    A 3 HB  2003-   20,00       empty
    BP102004    A 4 AVANT/Combi     1994-2001   20,00       empty
    BP102012    A 4 AVANT/Combi     2001-2007   20,00       empty
    BP102019    A 4 AVANT /Combi    2008-   20,00       102019
    BP102005    A 4 LIM/SED     2000-2008   20,00       empty
    BP102003    A 4 LIM/SED     1994-2001   20,00       empty
    BP102018    A 4 LIM/SED     2008-   22,00       empty
    BP102018    A 5     2007-   22,00       empty
    BP102022    A 5 SPORTBACK   2009-   25,00       empty
    BP102007    A 6 AVANT/Combi     1997-2005   20,00       empty
    BP102016    A 6 AVANT/Combi     2005-2011   25,00       empty
    BP102026    A 6 AVANT/Combi     2011-   25,00       empty
    BP102007    A 6 AVANT QUATTRO   1997-2005   20,00       empty
    BP102006    A 6 LIM/SED     1997-2004   22,00       empty
    BP102014    A 6 LIM/SED     2004-2011   25,00       empty
    BP102025    A 6 LIM/SED     2011-   25,00       empty
    BP102011    A 6 LIM German  1997-2004   22,00       empty
    BP102007    A 6 ALLOROAD QUATTRO    2000-   20,00       empty
    BP102024    A 7 SPORTBACK   2010-   25,00       empty
    BP102027    Q 3 with a tool set located in the trunk    2011-   22,00       empty
    BP102028    Q 3 with an irregular size spare tire (space saver, smaller than standard tires)    2011-   22,00       empty

数组中的所有值 - 必须在csv行中找到,与$ line 1相比

Full csv is uploaded here

1 个答案:

答案 0 :(得分:4)

尝试更改搜索功能,如下所示

function search($a, $line) {
        $file = 'empty';
        foreach($a as $mas_value) {
            if (substr($line[1], 2) == $mas_value) {
              $file = $mas_value;
              break;
            }
        }
        return $file;
    }