对象数组返回空数组?

时间:2012-01-27 18:12:17

标签: php arrays object

我有几个私有变量的文章类。然后我试图打开旧的DBF数据库(转换为CSV),并将CSV中的一些字段填入我的$ article。

由于我在CSV文件中有4747篇文章,我正在尝试创建一系列文章。

然而,如果我在写入文章之后立即回应我的文章,它看起来不错。但是,当while循环关闭时,我的数组接缝将填充空行,因为count将显示精确的4747个数组成员,但不能显示它们。

看起来数组实际上是指向$columns的指针,并且一旦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;       
}

1 个答案:

答案 0 :(得分: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++;
        }

    }