こんにちは!タクマです。
31歳未経験からエンジニア転職に成功し、
2021年3月より都内の受託開発企業にてサーバーサイドエンジニアとして働いており、
PHP/Laravel、Vue.jsを使用し開発をしています。
今回は僕が実務でよく使うとても便利なコレクションメソッド、pluck()
を紹介します。
pluck()
はおそらくどんなプロジェクトにおいても必ず使う機会があるメソッドと言っても過言ではないくらいよく使います。
Laravelをよく使う、学習中の方で
pluck()ってなに?
pluck()知らないなー!
という方は、必ず最後まで読んでください!
最後まで読めばきっとあなたの開発に役に立つでしょう!
pluck()メソッドの使い方
このような$users
という変数に入ったコレクション型のデータがあるとします。
dd($users); // dd()はデバッグ用の関数です。変数の中身を表示してくれます。
// 実行結果
Illuminate\Support\Collection {#268 ▼
#items: array:5 [▼
0 => array:3 [▼
"id" => 1
"name" => "山田太郎"
"age" => 22
]
1 => array:3 [▼
"id" => 2
"name" => "伊藤浩一"
"age" => 32
]
2 => array:3 [▼
"id" => 3
"name" => "佐藤智之"
"age" => 29
]
3 => array:3 [▼
"id" => 4
"name" => "高橋隆一"
"age" => 42
]
4 => array:3 [▼
"id" => 5
"name" => "本田真司"
"age" => 37
]
]
}
たとえばこのコレクションから名前だけを取り出すときにpluck()
メソッドを使います。
$userNames = $users->pluck('name');
dd($userNames);
// 実行結果
Illuminate\Support\Collection {#262 ▼
#items: array:5 [▼
0 => "山田太郎"
1 => "伊藤浩一"
2 => "佐藤智之"
3 => "高橋隆一"
4 => "本田真司"
]
}
名前だけが取得できていますね。
また、また引数を二つ設定することで、バリューだけでなくキーも取得することが可能です。
pluck('バリュー', 'キー')
とすることで取得できます。
$userIdAndNames = $users->pluck('name', 'id'); // キーがid、バリューがname
dd($userIdAndNames);
// 実行結果
Illuminate\Support\Collection {#262 ▼
#items: array:5 [▼
1 => "山田太郎"
2 => "伊藤浩一"
3 => "佐藤智之"
4 => "高橋隆一"
5 => "本田真司"
]
}
キーがID
、バリューがname
で取得できています。
ただ、引数はpluck('バリュー', 'キー')
という順番ですので、間違えないように注意です。
またpluck()
はコレクション型のまま返ってきます。
配列で返したいときはtoArray()
メソッドを使います。
$userNames = $users->pluck('name')->toArray();
dd($userNames);
// 実行結果
array:5 [▼
0 => "山田太郎"
1 => "伊藤浩一"
2 => "佐藤智之"
3 => "高橋隆一"
4 => "本田真司"
]
このようにして配列で取得することもできます。
ちなみにpluck()
メソッドを知る前の僕は上記のような値を取得する際、下記のようにして書いていました。汗
$userNames = [];
foreach($users as $user) {
array_push($userNames, $user['name']);
}
dd($userNames);
// 実行結果
array:5 [▼
0 => "山田太郎"
1 => "伊藤浩一"
2 => "佐藤智之"
3 => "高橋隆一"
4 => "本田真司"
]
同じ値は取得できていますが、かなり冗長ですね。
これでいかにpluck()
+ toArray()
を使用することで、短く綺麗に書けるかがわかりますね。
さいごに
いかがでしたでしょうか?
pluck()
メソッドについて理解できましたでしょうか?
ご質問やご指摘等ある方はコメントしていただければ返信させていただきます。
これからもエンジニアの方、プログラミング初学者の方に役に立つ記事を更新していきますのでよろしくお願いします!
Twitterでも情報発信をしていますので、よかったらフォローをお願いします(^^)