我制作了一个脚本,在foreach循环中创建一个对象,该对象填充了信息,然后进入嵌套的foreach循环,添加更多信息。
脚本是对信息进行概述,由用户发布+一些其他信息
$data = array();
foreach ($users as $user)
{
$row = new stdClass();
$row->user = $user;
$row->name = fullname($user);
$posts = getPosts($user);
foreach ($posts as $post)
{
$row->title = $post->title;
$row->datetime = $post->date;
$row->views = getViews($post->id);
$data[] = $row;
}
}
脚本完成后,$data
中的所有"行"对于每个用户都是相同的,都显示该用户最后添加的行。当我在将行放入数组之前检查该行时,这是我所期望的信息,尽管我已将其放入数组,但该对象似乎仍在积极使用。
在将对象放入数组或其他对象之前,我应该关闭它吗?
提前感谢!
=EDIT=
$data[] = $row;
在正确的位置,因为我希望输出如下:
Emma | 'My first post!' | 22-10-2014 | 8
Emma | 'posting again!' | 23-10-2014 | 24
Emma | 'Back from ...' | 02-01-2014 | 69
Rick | 'youknowit' | 10-10-2013 | 45
Freud | 'Yo momma' | 01-01-1970 | 123
Frued | 'fruitsalad' | 02-02-2010 | 3
[Update]您的代码在问题中添加了新信息后变得更有意义:)而且解决方案变得更加简单:只需在每个$post
循环中clone
$row
。
foreach ($users as $user)
{
$row = new stdClass();
$row->user = $user;
$row->name = fullname($user);
$posts = getPosts($user);
foreach ($posts as $post)
{
$item = clone $row; //<-- clone $row, $data will end up as you desire
$item->title = $post->title;
$item->datetime = $post->date;
$item->views = getViews($post->id);
$data[] = $item;
}
}