2012-01-27 192 views
0

我有幾個私人變量的文章類。然後我試圖打開舊的DBF數據庫(轉換爲CSV),並填寫一些CSV字段到我的$文章。對象數組返回空數組?

由於我有CSV文件中的4747篇文章,我正嘗試創建一個文章數組。

如何在寫入數組後立即回覆我的文章,看起來不錯。但是,當while循環關閉時,我的數組接縫將被填充空行,因爲count將顯示數組4747個成員,但是它們中的任何一個都不可見。

看起來像數組實際上是指向$columns的指針,while while循環結束後,我什麼也沒有指向,這就是爲什麼我什麼都得不到的原因? :)

我該如何強制(如果可以的話)PHP將精確的數據寫入對象數組?

public function readCSVFile ($article) 
{ 
    $row=0; 
    $singlecolumn=''; 
    $columns = ''; 
    $articlesarray = array(); 
    //$columns = array(); 
    //echo $current_file_path;// $this->csvtoopen = $_POST['csvtoimport']; 
    if (($handle = fopen("e:\\Tmp\\DBF2CSV\\tartikli.csv", "r")) != FALSE) 
    { 
     while (!feof($handle)) 
     { 
      $columns = fgetcsv($handle, 1000, ","); 
      $article->id=$columns[0]; 
      $article->name=$columns[1]; 
      $article->unit=$columns[2]; 
      $article->price=$columns[14]; 
      $article->stack=$columns[20]; 

      $articlesarray[$row]=$article; 
      //echo $articlesarray[$row]->name; //---> Works fine 
      $row++; 
     }  
    } 

    echo count($articlesarray); 
    for ($i=0;$i<count($articlesarray);$i++) 
    { 
     echo $articlesarray[$i]->name; //----> does not work any more 
    } 
    fclose($handle); 

    return $articlesarray;  
} 

回答

0

您需要爲每個數組迭代創建一個新的$ article實例,在這種情況下,傳遞$ article作爲參數沒有意義。

就這樣做以下

 while (!feof($handle)){ 
     $columns = fgetcsv($handle, 1000, ","); 
      $article = new Article(); <--------------- this is missing 
      $article->id=$columns[0]; 
      $article->name=$columns[1]; 
      $article->unit=$columns[2]; 
      $article->price=$columns[14]; 
      $article->stack=$columns[20]; 

      $articlesarray[$row]=$article; 
      //echo $articlesarray[$row]->name; //---> Works fine 
      $row++; 
     } 

    } 
+0

TNX哈桑汗。它的工作原理是這樣的:)實際上,爲4747篇文章創建4747篇文章,不僅僅是一篇,然後期待奇蹟:) – Balkyto 2012-01-27 18:25:32

+0

@Balykto您正在使用while循環,創建一個對象,然後將該對象分配給一個數組。軟件中沒有奇蹟:)。只是可變的範圍。 – Kevin 2012-01-27 19:03:47