2017-11-29 8 views
-1

私がここで間違っていることを理解するのに助けてくれる人がいますか?基本的には、このスクリプトはクエリからの返信を繰り返し、オブジェクトに値を追加しています。ただし、 - >を上書きすると最後のものが返されます。PHPがオブジェクトの上書きにネストされた変数を追加する

$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';

を代わりにそれだけで第三のいずれかを記憶する。

ここ
$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; 
     } 
    } 
} 

私はループ内で$返信をエコーし​​た場合、私はそれぞれの回答を参照してください。 $ストアはキャッシュファイルに書き込まれていますが、各投稿の最後の返信のみを保存しているようです。

私はPythonでコードを記述していますが、このプロジェクトをPHPで継承しています。その多くは私の頭を越えていますが、私は急速に学んでいます。APIの最初のアプローチを使ってすぐに再構築します。私はプロトタイプ用にすることができます。

+5

もっとコードを挿入できますか?ループのように – Ice76

+0

'json_decode($ jsondata、true);' –

+0

'(オブジェクト)[]'は 'new stdclass'で置き換えることができます。 – Phil

答えて

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; 
} 
関連する問題