[PHP] 連想配列にキーバリューをどうしても追加できない時に確認してみて欲しいこと

2019年4月2日ITLaravel, PHP

追加先は本当に「配列」でしょうか?「オブジェクト」じゃないでしょうか?

array_merge や +演算子を使っても、エラーになり、

「そ、そんなバカな、、、」

と、現場で絶望してたら、そもそも追加先は「配列」ではなく、「オブジェクト」でした。

[参考]
【PHP】連想配列、配列への追加

例:

$users = User::all();

foreach($users as $user) {
  // ここで $user に新しくキーバリューを追加したい 
}

array_merge を使うと、、、

$users = User::all();

foreach($users as $user) {
  $user = array_merge($user, ["country" => "japan"]);
}

※エラーメッセージ “array_merge(): Argument #1 is not an array” 「array_merge の引数1つ目が『配列』じゃない」と教えてくれてます。。

+演算子を使うと、、、

またまたエラー

[]を使うと、、、

$users = User::all();

foreach($users as $user) {
  $user["country"] = "japan";
}

php-why-cant-add-new-key-value3.png

追加できました!

オブジェクトなので、この書き方もできますね。

$users = User::all();

foreach($users as $user) {
  $user->country = "japan";
}

ブログやStackoverflow、本家のサイトで書かれてる通りにやってるのに、なんでエラーになんねん、とイライラする時は一呼吸置いて、自分のコードや出力されてるエラーコードを冷静に読まないとダメですね、ほんと。

今回の自分の場合ですと、array_merge を使った時のエラーの出力をしっかり読んで、gettype で $user の型を確認すればよかったです。

以上になります。

ひとこと

モデルのオブジェクトに新しくキーバリューを追加するのって、そもそもどーなんですか、とツッコまれそうですが、いろんなプロジェクトや状況がございまして、、、

スポンサーリンク

Posted by nobuhiro harada