PHP将嵌套变量添加到对象覆盖

时间:2017-11-29 23:56:23

标签: php loops variables object

有人可以帮我弄清楚我在这里做错了什么。基本上,此脚本循环查询查询中的$ reply并向对象添加值。但是,它覆盖了 - >回复了最后一个。

$store->{$f->id}->replies = $store->{$f->id}->replies ?? (object)[];
$store->{$f->id}->replies->{$reply->id} = $reply;

如果要循环回复3次,则应存储:

  1. $store->{$f->id}->replies->one = 'reply 1';
  2. $store->{$f->id}->replies->two = 'reply 2';
  3. $store->{$f->id}->replies->three = 'reply 3';
  4. 相反,它只存储第三个:

    $store->{$f->id}->replies->three
    

    以下是循环的完整代码:

    while($f = $q->fetch()) {
        $reply = static::chatter_message_format($f);
        $store->{$f->id} = $f;
        //If checking for posts from friends, user_id will be array
        if(is_array($user_id)) {                
            if($reply) {
                $store->{$f->id}->replies = $store->{$f->id}->replies ?? (object)[];
                $store->{$f->id}->replies->{$reply->id} = $reply;
            }
        } 
    }
    

    如果我在循环中回显$ reply,我会看到每个回复。 $ store正被写入缓存文件,但似乎只保存每个帖子的最后一个回复。

    我主要在python中编码,但是在PHP中继承了这个项目 - 很多都是我的头脑,但我正在迅速学习:)我将尽快使用API​​-first方法重建这个但是试图挽救我的东西可以用于原型。

1 个答案:

答案 0 :(得分:0)

啊,想通了。循环中的问题,这解决了它:

if(is_array($user_id)) {    
  if(!isset($store->{$f->id})) {
      $store->{$f->id} = $f;    //Was creating a new object here before the isset check.
}

if($reply) {

    $store->{$f->id}->replies = $store->{$f->id}->replies ?? (object)[];
    $store->{$f->id}->replies->{$reply->id} = $reply;
}