2011-10-24 71 views
0

對於打開的購物車,我使用CSV導入插件,默認情況下,如果缺少任何列字段,則會完全跳過產品。 是否有無論如何我可以讀取文件,並用'空'或0替換所有空字段,並將其發送回代碼。用某些東西替換空的CSV值 - PHP

跳過下面的檢查會導致閱讀/放置格式發生偏移!

$fh = fopen($file, 'r'); 
    if(!$fh) die('File no good!'); 

    // Get headings 
    $headings = fgetcsv($fh, 0, $delim); 
    $num_cols = count($headings); 
    $num_rows = 0; 

    //Read the file as csv 
    while (($row = fgetcsv($fh, 0, $delim)) !== FALSE) { 

     //missed product if num columns in this row not the same as num headings 
    if (count($row) != $num_cols) { 
     $this->total_items_missed++; 
     continue; 
     } 


     for ($i=0; $i<count($headings); $i++) { 
      $raw_prod[$headings[$i]] = $row[$i]; 
     } 
+1

刪除執行檢查的4行,具體取決於您對數據所做的操作,可能是您需要的。 – 2011-10-24 19:42:07

+0

只是在這裏產生一個偏移,然後$ raw_prod [$ headings [$ i]] = $ row [$ i]; – Neo

回答

1

這兩條線

$this->total_items_missed++; 
continue; 

$row = array_pad($row, $num_cols, 0); 

更換這將增加任何遺漏值0的

+0

謝謝,這很好!不確定以下哪一個更適合,我假設他們提供相同的結果。從來沒有在自己使用array_pad – Neo

+0

你只能使用它,如果你刪除列數檢查真的......所以沒有它不會工作,因爲你想。陣列墊是您不得不記住的功能之一。我幾乎沒有使用過它自己 –

1

嘗試

for($i = 0 ; $i<count($headings) ; $i++){ 
    if(!empty($row[$i])){ 
     $raw_prod[$headings[$i]] = $row[$i]; 
    }else{ 
     $raw_prod[$headings[$i]] = 0;//or what ever value you want 
    } 
}