PHP值独特的数组?

时间:2011-06-21 08:43:15

标签: php arrays unique

我在PHP中有一个如下所示的数组:

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

“name”中的两个值在这两个项目中是相同的。我想整理这样的重复。

如何通过检查“名称”值来创建唯一数组?

6 个答案:

答案 0 :(得分:21)

基本上

foreach($your_array as $element) {
    $hash = $element[field-that-should-be-unique];
    $unique_array[$hash] = $element;
}

答案 1 :(得分:13)

序列化对于简化建立分层数组唯一性的过程非常有用。使用这个衬垫来检索仅包含唯一元素的数组。

$unique = array_map("unserialize", array_unique(array_map("serialize", $input)));

答案 2 :(得分:2)

请找到此链接有用,使用md5哈希来检查重复项:

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

快速浏览:

/**
 * 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);

请参阅此处的工作示例: http://codepad.org/9nCJwsvg

答案 3 :(得分:0)

简单解决方案:

/**
 * @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;
}

答案 4 :(得分:0)

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');

答案 5 :(得分:-4)

鉴于数组(0,1)上的键似乎不重要,一个简单的解决方案是使用'name'引用的元素的值作为外部数组的键:

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

...如果除了'name'之外只有一个值,为什么还要使用嵌套数组呢?

["My_item"]=>"http://www.my-url.com/"