我制作了一个脚本,在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
答案 0 :(得分:2)
[更新]使用添加到问题中的新信息,您的代码更有意义:)解决方案变得更加简单:只需clone
$row
每个$post
- 循环。
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;
}
}