Get unique value of one attribute from array of associative arrays

后端 未结 5 590
青春惊慌失措
青春惊慌失措 2021-01-18 06:38

I have an array like this:

$a = array(
    0 => array(\'type\' => \'bar\', \'image\' => \'a.jpg\'),
    1 => array(\'type\' => \'food\', \'ima         


        
相关标签:
5条回答
  • 2021-01-18 07:16

    Using PHP >= 5.5, you could do:

    $ar = array_unique(array_column($a, 'type'));
    

    print_r($ar):

    Array ( 
        [0] => bar 
        [1] => food 
        [3] => default 
    )
    

    http://php.net/manual/en/function.array-column.php

    http://php.net/manual/en/function.array-unique.php

    0 讨论(0)
  • 2021-01-18 07:23

    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));
    
    0 讨论(0)
  • 2021-01-18 07:31

    You could also use array_reduce.

    This only doesn't work if the values of the attribute are an array or object, because those can't be set as the key of an array.

    function array_unique_attr($arr, $key) {
    
        return array_keys( array_reduce($arr, function($newArr, $event) {
    
            $newArr[$key] = true;
            return $newArr;
    
        }, []) );
    
    }
    
    $unique_types = array_unique_attr($a, 'type');
    
    0 讨论(0)
  • 2021-01-18 07:32

    try this

    $uniqueA = array_unique($a, "type");
    // then to output the array just type
    print_r($uniqueA);
    
    0 讨论(0)
  • 2021-01-18 07:35

    An old fashioned way without using the fancy array_* functions. This way is simple and easy to understand. You aren't left wondering what is happening because it so straightforward.

    $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')
    );
    
    $types = array();
    
    foreach($a as $key => $type) {
            if(! isset($types[$type['type']]))
                    $types[$type['type']] = $type['type'];
    }
    
    var_dump($types);
    
    0 讨论(0)
提交回复
热议问题