laravelのcollectionでfilterを使った時はかならずvalues()を呼ぶ

laravelのcollectionでfilterを使って絞り込んだときは、必ずvalues()を呼びましょう。
こんな感じに。

$new = array.filter(function(value){
  return (何か条件式);
}).values();

なぜかというと、これをしないと配列にしたときに添え字が歯抜けになるから。
PHPだけで使うのであれば特に問題はないのですが、これを配列にしてjavascriptとか外部のAPIになげたときに不具合になる場合があります。
どうしてかというと、javascriptは歯抜けの配列を認めないためです。外部のAPIがNode.jsとかで作られていたらアウトですね。
ほかの言語がどうなのかまでは確認してませんが、ともかく連番にして渡したほうが無難です。

たまに、for文つかうなみたいなことを言う人がいますが、PHPなら特に理由がない限りforeachのほうがいいと思います。
どうしてもラムダ式じゃなきゃやだというひとは仕方がないですけどね。

タイトルとURLをコピーしました