In Laravel 11.x & Laravel 12.x, the Arr::keyBy() method is a powerful utility provided by the Illuminate\Support\Arr class. It allows you to transform an array by using a specific key or callback to index the array. This is particularly useful when you want to reindex an array based on a unique identifier or a computed value.
Example Usage
1. Using a Key Name
If your array items are associative arrays, you can use a key name to reindex the array.
use Illuminate\Support\Arr; $users = [ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Jane'], ['id' => 3, 'name' => 'Doe'], ]; $keyedUsers = Arr::keyBy($users, 'id'); print_r($keyedUsers);
Output
[ 1 => ['id' => 1, 'name' => 'John'], 2 => ['id' => 2, 'name' => 'Jane'], 3 => ['id' => 3, 'name' => 'Doe'], ]
2. Using a Callback Function
If you need more control over how the keys are generated, you can use a callback function.
use Illuminate\Support\Arr; $users = [ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Jane'], ['id' => 3, 'name' => 'Doe'], ]; $keyedUsers = Arr::keyBy($users, function ($user) { return 'user_' . $user['id']; }); print_r($keyedUsers);
Output
[ 'user_1' => ['id' => 1, 'name' => 'John'], 'user_2' => ['id' => 2, 'name' => 'Jane'], 'user_3' => ['id' => 3, 'name' => 'Doe'], ]
3. Using with Objects
Arr::keyBy() also works with arrays of objects.
use Illuminate\Support\Arr; class User { public function __construct(public $id, public $name) {} } $users = [ new User(1, 'John'), new User(2, 'Jane'), new User(3, 'Doe'), ]; $keyedUsers = Arr::keyBy($users, 'id'); print_r($keyedUsers);
Output
[ 1 => User { id: 1, name: 'John' }, 2 => User { id: 2, name: 'Jane' }, 3 => User { id: 3, name: 'Doe' }, ]