[Laravel] arrayデータのheader行を省略して書く

Tech


初期値だったりデータ流し込みだったり、Sitemap的なやつだったり、結構名前付きのArrayを書くことが多いと思うんだけど、毎回name指定するの面倒だよねっていうときに。

(Laravelの `Illuminate\Support\Collection` の恩恵。)

Collections – Laravel – The PHP Framework For Web Artisans https://laravel.com/docs/8.x/collections

$header = collect(['id','name', 'description']);

$values = collect([
  [1, 'one', 'hogehoge'],
  [2, 'two', 'hogehoge']
]);

$array = $values->map(fn($col) => $header->combine($col))->toArray()

尚、この書き方は php7.4以降で。

php7.4以前の場合はこう

$array = $values->map(
  function($value) use ($header) {
    return $header->combine($value);
  }
)->toArray();

(当然ながら、header行と数ズレてると動かないし、Arrayになるのでオブジェクトではないよっていう)