我有几个私有变量的文章类。然后我试图打开旧的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;
}
答案 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++;
}
}