2016-08-19 59 views
0

我有一個CSV文件看起來像這樣:重新格式化使用列表/陣列上傳CSV文件PHP

Main Road \t B \t 3 
Main Road \t B \t 3 
Main Road \t B \t 5 
Example Road \t B \t 3 

我需要輸出這樣的:

Main Road,B3-B5 
Example Road, B3 

我需要:

  • 刪除重複的行

  • 保持「主路」和「B」和「3」一起

  • 檢查,如果兩行有不同的名字,如果是的話:

    • 通過依賴最大數或更大的信件,加入他們的行列哪一個是更大的

到目前爲止,我已經試過至少他們分隔條件到一個關聯數組,其中街道名稱是索引:

的問題是部分工作:

Notice: Undefined offset: 1 in C:\xampp\htdocs\pietruska-crm\php\indexCSV.php on line 13 

Notice: Undefined offset: 2 in C:\xampp\htdocs\pietruska-crm\php\indexCSV.php on line 13 
Hambrücker Straße=>C3 
Langestraße=>C2 
Weiherer Straße=>E3 

爲什麼抵消不確定的,但輸出的作品? 我如何有效地構造這個?關於如何創建列表數組,PHP列表的文檔相當模糊。

感謝

+0

你用'strtok'做什麼? – ilyatom

+0

將CSV文件(字符串)拆分爲單獨的行。我試圖在沒有它的情況下處理這個文件,但它不能以這種方式工作。 –

+0

哦,你的意思是我可以再次使用strtok()?會試試這個。 –

回答

0

試試這個:

$array_of_lines = explode('\n',$postData); 
    $array_of_lines = array_unique($array_of_lines); // delete duplicate strings 
    $handled_array_of_lines = array(); 
    foreach ($array_of_lines as $line) { 
     $array_of_values = explode("\t",$line); // now you have array('Road',B,3) 
     $road = $array_of_values[0]; 
     $param = $array_of_values[1].$array_of_values[2]; 

     // check if the road meets first time or not; if not, add new param into this road entry 
     if (!isset($handled_array_of_lines[$road])) { 
      $handled_array_of_lines[$road] = $param; 
     } else { 
      $handled_array_of_lines[$road] .= '-'.$param; 
     } 
    } 

    foreach ($handled_array_of_lines as $road => $param) { 
     echo $road."=>".$param."<br>"; 
    } 
+0

不,同樣的錯誤我得到了:未定義偏移「1」和「2」爲$ array_of_values [1]和$ array_of_values [2] –

+0

但是,array_of_values [0]因爲某種原因工作 –

+0

$ array_of_values是array(1){[ 0] => string(2)「\ n」} \ n => –