在数组中推送的对象的意外行为


unexpected behavior of object pushed in an array

我制作了一个脚本,在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;
    }
}