对象数组返回空数组?
问题描述:
我有几个私人变量的文章类。然后我试图打开旧的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;
}
答
您需要为每个数组迭代创建一个新的$ 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++;
}
}
TNX哈桑汗。它的工作原理是这样的:)实际上,为4747篇文章创建4747篇文章,不仅仅是一篇,然后期待奇迹:) – Balkyto 2012-01-27 18:25:32
@Balykto您正在使用while循环,创建一个对象,然后将该对象分配给一个数组。软件中没有奇迹:)。只是可变的范围。 – Kevin 2012-01-27 19:03:47