PHP(Laravel)でmapメソッドを使用した時に以下のエラー文が表示された際の対処法を紹介します。
Call to a member function map() on array
原因
Laravelのmap()はコレクション配列で使用することができるメソッドです。
なので配列でmap()メソッドを使用したい場合laravelのヘルパ関数で配列をコレクション配列にする必要があります。
コレクションとは
コレクションとはLaravel独自の形式で配列を操作する機能が拡張されたラッパーのことを言います。
配列をコレクション形式に変換してLaravelで定義されているメソットを呼び出すと様々な操作や機能を簡単に実装することができます。
https://readouble.com/laravel/8.x/ja/collections.html
エラーになる例
配列なのでエラーになります。
$collection = [1, 2, 3, 4, 5];
$multiplied = $collection->map(function ($item, $key) {
return $item * 2;
});
$multiplied->all();
// Call to a member function map() on array
解決方法
collect()メソッドでコレクション配列にすることでmap()が使えるようになります。
もしくはコレクション配列にはせずシンプルにforeachでループしてやるとエラーを回避することができます。
$collection = collect([1, 2, 3, 4, 5]);
$multiplied = $collection->map(function ($item, $key) {
return $item * 2;
});
$multiplied->all();
// [2, 4, 6, 8, 10]