2012-10-30 174 views
0

在一個Web應用程序中,我的用戶上傳了一個csv文件,我需要在進入數據庫的過程中檢查它。部分信息形成一個簡單的分層數據集,所以我想確保行是唯一的。舉一個例子,這就是我想要做的。什麼是從csv到數據庫的最簡單的方法?

CSV包括這些行...

field5  field6  field7 
fred  bert  apple 
fred  bert  apple 
fred  george 
fred  george  pear 
will  tom   orange 
will  tom   plum 

我要他們吸收到一個PHP數組是這樣的。

$unique_fields = array(); 
while($row = fgetcsv($handle)){ 
    if($row[5]){ 
     if(!array_key_exists($row[5] , $unique_fields)){ 
      $unique_fields[ $row[5] ] = array(); 
     } 
     if($row[6]){ 
      if(!array_key_exists($row[6] , $unique_fields[ $row[5] ])){ 
       $unique_fields[ $row[5] ][ $row[6] ] = array(); 
      } 

      if($row[7]){ 
       if(!array_key_exists($row[7], $unique_fields[ $row[5] ][ $row[6] ] )){ 
        $unique_fields[ $row[5] ][ $row[6] ][ $row[7] ] = array(); 
       } 
      } 
     } 
    } 
} 

如果這是一個好主意(我願意接受建議) - 那麼最好的方法是什麼?我想將數組傳送到我的數據庫中,以便它看起來像上面的csv示例,但沒有重複。

+0

層次結構如何參與這個問題?你只需要刪除行? – Skrol29

+0

@ Skrol29 - 重點是簡化csv的層次結構。 csv可能有10,000行,但相關列中的層次結構可能只包含(比如說)10-12個唯一項。這些將與其餘的csv數據進入不同的表格。 – Pete

回答

0

好的,沒有人想刺穿它,所以我堅持下來,這就是我想出的。如果有人有更好的解決方案,我會觀看該頁面。感謝您的期待。

if(count($unique_fields)){ 
    foreach($unique_fields as $k1=>$v1){ 
     if(is_array($v1)){ 
      foreach($v1 as $k2=>$v2){ 
       if(is_array($v2)){ 
        foreach($v2 as $k3=>$v3){ 
         //insert $k1, $k2, $k3 
        } 
       }else{ 
        //insert $k1, $k2 
       } 
      } 
     }else{ 
      //insert $k1 on its own 
     } 
    } 
} 
相關問題