2012-01-27 150 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