用PHP搜索CSV文件

时间:2010-12-16 20:30:07

标签: php search csv

我有一个csv文件,如下所示:

603629,0,ATLV0008,"Vendor1",1942.60,11/04/2010,1942.60,9/1-9/30/10,EFT-JP
603627,2,ATLV0008,"Vendor1",1242.40,11/04/2010,1242.40,7/1-7/31/10,EFT-JP
600023,0,FLD4V0003,"Vendor2",1950.00,06/15/2010,1950.00,6/14/10 Request,EFT-JP
600024,0,FLD4V0003,"Vendor2",1800.00,06/15/2010,1800.00,6/14/10 Request,EFT-JP
603631,0,ATLV5066,"Vendor2",1000.00,11/09/2010,1000.00,11/4/10 Check Request,PM2
603647,0,ATLV5027,"DVendor3",2799.80,11/15/2010,2799.80,10/1-10/31/10 Bishop,PM2
603642,5,ATLV5027,"Vendor3",482.40,11/15/2010,482.40,10/1-10/18/10 Allen,PM2
603653,0,ATLV0403,"Vendor4",931.21,11/17/2010,931.21,9/1-9/30/10,EFT-JP
603661,0,ATLV0105,"Vendor5",26.75,11/19/2010,26.75,093139,PM2
603660,1,ATLV0105,"Vendor5",5.35,11/19/2010,5.35,093472,PM2

我正在使用fgetcsv导入此文件,然后将其导出到xml并使用html正确显示。

需要根据Office(2n字段中的ATL)和供应商进行组织。该文件不会以任何方式排序。搜索文件的最佳方法是什么?

这是我到目前为止所做的:

if (($handle = fopen('upload/ATLANTA.csv', "r")) !== FALSE) { 
      while (($data = fgetcsv($handle, 1000, ","))) {  
         $currOffice = substr($data[2], 0, 3);
                  foreach ($data as $key => $d) {
                    if ($key != 1){
                    $invoiceData = "<div class=\"field\">" .$d . "</div>";
                    }
                    $prevVendor = $data[3];
                    $prevOffice = $currOffice;
                } 
      }
  }

2 个答案:

答案 0 :(得分:1)

查看PHP manual page for the array_search() function

它并不能完全满足您的需求,但页面上最新的用户评论提供了一个搜索多级数组的功能,这对我来说就像是完全符合您的要求。

希望有所帮助。

答案 1 :(得分:1)

首先(这只是我)我会通过创建一个像这样的多维数组来清理数据......

if (file_exists('ATLANTA.csv') != FALSE) {
    $handle  = file_get_contents('ATLANTA.csv') or exit;
    $handle_row = explode("\n", $handle);
    foreach ($handle_row as $key => $val) {
        $row_array = explode(',', $val);
        foreach ($row_array as $key => $val) {
            $row_array[$key] = trim(str_replace('"', '', $val));
            }
        $complete[] = $row_array;
        }
    }

然后,通过以下函数传递$ complete,以按第二层数组的值进行排序。

$array_elem_01 = 2; // Which Column to Sort By
$array_elem_02 = 3; // <-- Edit
if (isset($complete)) {
    foreach ($complete as $key => $val) {
        $sort_01[$key] = $val[$array_elem_01] . $val[$array_elem_02]; // <-- Edit
        }
    asort($sort_01);
    foreach ($sort_01 as $key => $val) {
        $output[] = $complete[$key];
        }
    }
return $output;