Search code examples
phparraysforeachuniqueunique-values

Get unique value of one attribute from array of associative arrays


I have an array like this:

$a = array(
    0 => array('type' => 'bar', 'image' => 'a.jpg'),
    1 => array('type' => 'food', 'image' => 'b.jpg'),
    2 => array('type' => 'bar', 'image' => 'c.jpg'),
    3 => array('type' => 'default', 'image' => 'd.jpg'),
    4 => array('type' => 'food', 'image' => 'e.jpg'),
    5 => array('type' => 'food', 'image' => 'f.jpg'),
    6 => array('type' => 'food', 'image' => 'h.jpg')
)

How do I figure out unique type values (which would be food, bar and default)? I could iterate through the array in a foreach loop but is there a better way doing it?


Solution

  • In PHP >= 5.3 with the use of anonymous functions:

    $unique_types = array_unique(array_map(function($elem){return $elem['type'];}, $a));
    

    For previous versions you can declare a separate function:

    function get_type($elem)
    {
        return $elem['type'];
    }
    
    $unique_types = array_unique(array_map("get_type", $a));