The keyBy
method is used to create a new Collection
instance where the keys of the new key/value pairs are determined by a $keyBy
callback function (a string
value can also be supplied instead of a function). The signature of the callback function is keyBy($item)
, where the $item
is the actual item in the collection. This method does not change the original Collection
instance will will return a new, modified, Collection
instance.
#Signature
1public function keyBy(
2 $keyBy
3);
#Example Use
The following sample will be used to demonstrate the keyBy
method:
1// Create a new collection.
2$people = collect([
3 ['id' => 12, 'name' => 'Alice', 'age' => 26],
4 ['id' => 52, 'name' => 'Bob', 'age' => 34],
5 ['id' => 14, 'name' => 'Chris', 'age' => 26]
6]);
In the following example, we will create a new collection instance where the key of each item is the persons id
. We will not supply a callback function in this example, but rather pass the name of the value we want to use as the key as as string:
1$results = $people->keyBy('id');
After the above code has executed, the $results
variable will contain a value similar to the following output:
1Collection {
2 #items: array [
3 12 => array [
4 "id" => 12
5 "name" => "Alice"
6 "age" => 26
7 ]
8 52 => array [
9 "id" => 52
10 "name" => "Bob"
11 "age" => 34
12 ]
13 14 => array [
14 "id" => 14
15 "name" => "Chris"
16 "age" => 26
17 ]
18 ]
19}
We can also achieve the exact same results by using a callback function like so:
1$results = $people->keyBy(function($item) {
2 return $item['id'];
3});
However, the above example is overly complicated if all we were interested in was just the id
of the person. We could do something a little more interesting, such as returning a simple hash of each persons id
to use as the new key:
1$results = $people->keyBy(function($item) {
2 return md5($item['id']);
3});
After the above code has executed, the new $results
variable would contain a value similar to the following output:
1Collection {
2 #items: array [
3 "c20ad4d76fe97759aa27a0c99bff6710" => array [
4 "id" => 12
5 "name" => "Alice"
6 "age" => 26
7 ]
8 "9a1158154dfa42caddbd0694a4e9bdc8" => array [
9 "id" => 52
10 "name" => "Bob"
11 "age" => 34
12 ]
13 "aab3238922bcc25a6f606eb525ffdc56" => array [
14 "id" => 14
15 "name" => "Chris"
16 "age" => 26
17 ]
18 ]
19}
The same method could just as easily be applied to other hashing libraries, such as the hashids.php library.
∎