PHP unique array by value?

后端 未结 6 664
南方客
南方客 2020-12-03 15:22

I have an array in PHP that looks like this:

  [0]=>
       array(2) {
           [\"name\"]=>
              string(9) \"My_item\"
           [\"url\"]         


        
相关标签:
6条回答
  • 2020-12-03 15:28

    Serialisation is very useful for simplifying the process of establishing the uniqueness of a hierarchical array. Use this one liner to retrieve an array containing only unique elements.

    $unique = array_map("unserialize", array_unique(array_map("serialize", $input)));
    
    0 讨论(0)
  • 2020-12-03 15:28

    Simple Solution:

    /**
     * @param $array
     * @param null $key
     * @return array
     */
    public static function unique($array,$key = null){
        if(null === $key){
            return array_unique($array);
        }
        $keys=[];
        $ret = [];
        foreach($array as $elem){
            $arrayKey = (is_array($elem))?$elem[$key]:$elem->$key;
            if(in_array($arrayKey,$keys)){
                continue;
            }
            $ret[] = $elem;
            array_push($keys,$arrayKey);
        }
        return $ret;
    }
    
    0 讨论(0)
  • 2020-12-03 15:32

    Given that the keys on the array (0,1) do not seem to be significant a simple solution would be to use the value of the element referenced by 'name' as the key for the outer array:

    ["My_item"]=>
       array(2) {
           ["name"]=>
              string(9) "My_item"
           ["url"]=>
              string(24) "http://www.my-url.com/"
       }
    

    ...and if there is only one value other than the 'name' why bother with a nested array at all?

    ["My_item"]=>"http://www.my-url.com/"
    
    0 讨论(0)
  • 2020-12-03 15:35

    Please find this link useful, uses md5 hash to examine the duplicates:

    http://www.phpdevblog.net/2009/01/using-array-unique-with-multidimensional-arrays.html

    Quick Glimpse:

    /**
     * Create Unique Arrays using an md5 hash
     *
     * @param array $array
     * @return array
     */
    function arrayUnique($array, $preserveKeys = false)
    {
        // Unique Array for return
        $arrayRewrite = array();
        // Array with the md5 hashes
        $arrayHashes = array();
        foreach($array as $key => $item) {
            // Serialize the current element and create a md5 hash
            $hash = md5(serialize($item));
            // If the md5 didn't come up yet, add the element to
            // to arrayRewrite, otherwise drop it
            if (!isset($arrayHashes[$hash])) {
                // Save the current element hash
                $arrayHashes[$hash] = $hash;
                // Add element to the unique Array
                if ($preserveKeys) {
                    $arrayRewrite[$key] = $item;
                } else {
                    $arrayRewrite[] = $item;
                }
            }
        }
        return $arrayRewrite;
    }
    
    $uniqueArray = arrayUnique($array);
    var_dump($uniqueArray);
    

    See the working example here: http://codepad.org/9nCJwsvg

    0 讨论(0)
  • 2020-12-03 15:43
    function unique_multidim_array($array, $key) { 
                $temp_array = array(); 
                $i = 0; 
                $key_array = array(); 
    
                foreach($array as $val) { 
                    if (!in_array($val[$key], $key_array)) { 
                        $key_array[$i] = $val[$key]; 
                        $temp_array[$i] = $val; 
                    } 
                    $i++; 
                } 
                return $temp_array; 
            } 
    $result = unique_multidim_array($visitors,'ip');
    
    0 讨论(0)
  • 2020-12-03 15:51

    basically

    foreach($your_array as $element) {
        $hash = $element[field-that-should-be-unique];
        $unique_array[$hash] = $element;
    }
    
    0 讨论(0)
提交回复
热议问题