'Multidimensional indexed array to associative array depending on column value

I have a multidimensional indexed array. Each element is an associative array with an id column which is unique between elements (its value never repeats within the array).

[indexed] =>Array
(
    [0] => Array
        (
            [id] => john
            [name] => John
            [age] => 29
        ),

    [1] => Array
        (
            [id] => peter
            [name] => Peter
            [age] => 30
        ),

    [2] => Array
        (
            [id] => harry
            [name] => Harry
            [age] => 19
        )
)

My goal is to convert this array into a multidimensional associative array, indexed by id values.

[indexed] =>Array
(
    [john] => Array
        (
            [id] => john
            [name] => John
            [age] => 29
        ),

    [peter] => Array
        (
            [id] => peter
            [name] => Peter
            [age] => 30
        ),

    [harry] => Array
        (
            [id] => harry
            [name] => Harry
            [age] => 19
        )
)

My best attempt so far is to loop over array elements and manually create the final array.

$associative = array();
foreach($indexed as $key=>$val) $associative[$val['id']] = $val;

I think it's not the most elegant solution. Is it possible to obtain the same result with built-in (more efficient) functions?



Solution 1:[1]

Here is another way of doing it (assuming $arr is your original array):

$associative = array_combine(array_map(function($item) { return $item['id']; }, $arr), $arr);

But I think using a foreach is still shorter and more readable compare to this.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Armin Sam