2016-10-27 10 views
2

マイコード: シナリオ1phpの配列内のすべてのオブジェクトに新しいキー値のペアを追加するには?

$newarray = array(); 

foreach($rows as $k => $v) 
    { 
      $newarray[$k] = $v; 
      $newarray['newitem'] = 'Add this to existing object'; 
    } 
echo json_encode($newarray); 

私もこの試み: シナリオシナリオ1では2

$newarray = array(); 

foreach($rows as $k => $v) 
    { 
      $newarray[$k] = $v; 
      $newarray[$k]['newitem'] = 'Add this to existing object'; 
    } 
echo json_encode($newarray); 

は、キーと値のペアは、後に第1の目的のみのために追加されます。ループしません。 シナリオ2では、HTTPエラーが発生します。

私はここで間違っていますか?

更新:

既存の出力:

[{"pid":"123","date":"2016-08-23 08:08:40","post_title":"AHHH"},{"pid":"223","date":"2016-08-23 08:08:40","post_title":"wwwwAHHH"},{"pid":"223","date":"2016-08-23 08:08:40","post_title":"xxxAHHH"}] 

必要な出力:

[{"pid":"123","date":"2016-08-23 08:08:40","post_title":"AHHH","newkey":"new value1"},{"pid":"223","date":"2016-08-23 08:08:40","post_title":"wwwwAHHH","newkey":"new value2"},{"pid":"223","date":"2016-08-23 08:08:40","post_title":"xxxAHHH","newkey":"new value3"}] 
+0

最初のシナリオは間違っています。 2番目はうまくいくはずです。 '$ v'は配列ですか?あなたのエラーはあなたのコードのどこかで発生する可能性があります。入力と希望する出力の例を提供できますか? – RST

+0

'$ rows'に含まれるものを表示してください。また、 '$ newarray'の期待される結果を表示します。 –

答えて

2

あなたが欲しいものを含む一時的な配列を作成し、その後、NEWARRAYに追加し、そう作成することができます新しい配列と既存のデータを追加して、新しい配列に追加します。

$newarray = array(); 
foreach($rows as $k => $v) 
{ 
    $t = $v; 
    $t['newitem'] = 'Add this to existing object'; 
    $newarray[$k] = $t; 
} 
echo json_encode($newarray); 

EDIT:これはあなたが望むものを行う方法であるJSON文字列である

今、私は$rowsであるか知っています。あなたが最初にJSON文字列

$rows = '[{"pid":"123","date":"2016-08-23 08:08:40","post_title":"AHHH"},{"pid":"223","date":"2016-08-‌​23 08:08:40","post_title":"wwwwAHHH"},{"pid":"223","date":"2016‌​-08-23 08:08:40","post_title":"xxxAHHH"}]'; 

$objArray = json_decode($rows); 

$newarray = array(); 
foreach($objArray as $v) 
{ 

    $v->newitem = 'Add this to existing object'; 
    $newarray[] = $v; 
} 
print_r($newarray); 
echo json_encode($newarray); 

$newArrayに戻ってそれを変換し、その後、新しいデータを追加し、それに対するforeach、PHPのデータ構造に変換する必要があり、JSON文字列を経由するforeach今

であることはできません
Array 
(
    [0] => stdClass Object 
     (
      [pid] => 123 
      [date] => 2016-08-23 08:08:40 
      [post_title] => AHHH 
      [newitem] => Add this to existing object 
     ) 

    [1] => stdClass Object 
     (
      [pid] => 223 
      [date] => 2016-08-‌​23 08:08:40 
      [post_title] => wwwwAHHH 
      [newitem] => Add this to existing object 
     ) 

    [2] => stdClass Object 
     (
      [pid] => 223 
      [date] => 2016‌​-08-23 08:08:40 
      [post_title] => xxxAHHH 
      [newitem] => Add this to existing object 
     ) 

) 

また、新しいJSON文字列がシナリオ1では

[ {"pid":"123", 
    "date":"2016-08-23 08:08:40", 
    "post_title":"AHHH", 
    "newitem":"Add this to existing object" 
    }, 
    {"pid":"223", 
    "date":"2016-08-\u200c\u200b23 08:08:40", 
    "post_title":"wwwwAHHH", 
    "newitem":"Add this to existing object" 
    }, 
    {"pid":"223", 
    "date":"2016\u200c\u200b-08-23 08:08:40", 
    "post_title":"xxxAHHH", 
    "newitem":"Add this to existing object" 
    } 
] 
+0

HTTPエラーが発生しました。 – Anirudh

+0

' $ rows'には何がありますか? – RiggsFolly

+0

$ rows = [{"pid": "123"、 "date": " 2016-08-23 08:08:40 "、" post_title ":" AHHH "}、{" pid ":" 223 "、" date ":" 2016-08-23 08:08:40 "、" post_title " : "wwwwAHHH"}、{"pid": "223"、 "date": "2016-08-23 08:08:40"、 "post_title": "xxxAHHH"}] – Anirudh

1

になりますそれだけで上書きされているので、あなたは、同じ配列のキーに、毎回異なる値、$ Vを割り当てます(最終的にforeachのに渡された最後の行の値になってしまうであろう):

$newarray['newitem'] = 'Add this to existing object'; 

シナリオ2が右行にあるが、わずかに変更する必要があります。シナリオ2では、あなたは$ vを含む配列を付加するが、その後すぐにそれをオーバーライドする:

$newarray[$k] = $v; 
$newarray[$k]['newitem'] = 'Add this to existing object'; 

あなたがアイテムに別々の鍵を与​​える必要があるので、解決策は、初期値を代入するには「olditem」キーを使用することができTo:

$newarray[$k]['olditem'] = $v; 
$newarray[$k]['newitem'] = 'Add this to existing object'; 

あなたは、配列を構成することにしたいが、重要な原則は、彼らがお互いを上書きしないように値が別々の鍵を持っていることを確認する方法に応じて行うことができ、多くのソリューションがあります。

+0

これを試してみましたが、出力は次のようになります:[ {"oldItem":{"pid": "123"、 "date": "2016-08-23 08:08:40" 「oldItem」:{「pid」:「123」、「date」:「2016」、「postItem」、「post_title」:「AHHH」、「newkey」:「new value1」}、「newItem」:「値1」}、 { "oldItem":{"pid": "newItem": "値2"}、 {"oldItem" "123"、 "date": "2016-08-23 08:08:40"、 "post_title": "AHHH"、 "newkey": "new value1"}、 "newItem": "値3 "} ] – Anirudh

+0

受信しているHTTP 500エラーの内容を表示できますか? –

関連する問題