LoginSignup
7
3

More than 5 years have passed since last update.

[Laravel] Arr::addに注意→マニュアルは修正されました。

Last updated at Posted at 2019-03-15

(2019/03/30 追記)
本家、日本語版とも修正が行われましたのでもうこの問題はありません。

LaravelのヘルパーのArr::addは以下のようにマニュアルに書いてあります

Arr::addメソッドは指定されたキー/値のペアをそのキーが存在していない場合、配列に追加します。

「キーが存在していない場合」といったら普通はarray_key_existsArr::has()のように値によらずキーがあるかないかだけの意味だと思うのですが、実はキーが存在していても値がnullだった場合は新しい値に更新されるのでした。

>>> Arr::add(['price' => null], 'price', 100)
=> [
     "price" => 100,
   ]

ということでmemcachedのaddみたいな動作を期待すると裏切られます。気をつけましょう。

いちおうPRは出してみました(https://github.com/laravel/docs/pull/5064)

(追記)
PRは文章が長かったか英語がイマイチだったので採用されませんでしたが問題は理解していただけたようででこちらのコミットで以下のように修正されました(HelpersのArr::add)。

The Arr::add method adds a given key / value pair to an array if the given key doesn't already exist in the array or is set to null:

use Illuminate\Support\Arr;

$array = Arr::add(['name' => 'Desk'], 'price', 100);

// ['name' => 'Desk', 'price' => 100]

$array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);

// ['name' => 'Desk', 'price' => 100]

(2019/03/30 追記)
こちらのコミットで日本語版にも反映されました。

Arr::addメソッドは指定されたキー/値のペアをそのキーが存在していない場合とnullがセットされている場合に、配列に追加します。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3