2024.06.03
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ

コレクションのchunkメソッドで勘違いしてしまったことがあったので共有します。
https://readouble.com/laravel/10.x/ja/collections.html#method-chunk
例えば以下のような例
$arr = ['a', 'b', 'c', 'd', 'e'];
$collection = collect($arr);
$chunks = $collection->chunk(2);
var_dump($chunks->toArray());
結果は以下のようになります。
array(3) { [0]=> array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } [1]=> array(2) { [2]=> string(1) "c" [3]=> string(1) "d" } [2]=> array(1) { [4]=> string(1) "e" } }
自分はchunkが生成するそれぞれのコレクション(今回はtoArrayしているので配列)のキーが0から始まると勘違いしたことがありました。。。
$arrが[キー1=>バリュー1, キー2=>バリュー2]のようにコード上で表現されていなかったので、キーの保持が意識できていませんでした。
先ほどの各配列のキーを0スタートにするために、例えば以下のような実装をすることができます。
$arr = ['a', 'b', 'c', 'd', 'e'];
$collection = collect($arr);
$chunks = $collection->chunk(2);
$arr = [];
foreach ($chunks->toArray() as $eachArr) {
$arr[] = [...$eachArr];
}
var_dump($arr);
結果
array(3) { [0]=> array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } [1]=> array(2) { [0]=> string(1) "c" [1]=> string(1) "d" } [2]=> array(1) { [0]=> string(1) "e" } }