2011-06-21 148 views
8

我在PHP中的數組,看起來像這樣:在「名稱」按值排列的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/" 
    } 

兩個值都在這兩個項目是相同的。我想解決這樣的重複。

如何通過檢查「名稱」值來創建唯一的數組?

+0

[如何去除的重複的值-從-A-多維陣列功能於PHP(http://stackoverflow.com/問題/ 307674/how-to-remove-duplicate-values-from-a-multi-dimensional-array-in-php) –

+2

你想結束什麼陣列?鑑於URL的兩個值是不同的,他們中的一個必須去?如果是這樣,你將如何確定失去哪個? – Pavling

+1

http://stackoverflow.com/questions/6417352/php-de-duplicate-keys-in-different-objects-in-array關於對象,但除此之外完全一樣 – KingCrunch

回答

15

基本上

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

Tnx這幫了我很多 – DownDown

+0

這是一個獨特的,很好的解決方案 – divyenduz

11

序列化對於簡化建立分級陣列的唯一性的方法是非常有用的。使用這一個班輪來檢索只包含唯一元素的數組。

$unique = array_map("unserialize", array_unique(array_map("serialize", $input))); 
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

Gi。
+0

@Symcbean即使第二層次的值是唯一的,而不僅僅是第一個值,爲什麼這不解決這個問題?它給你輸出,請參閱工作示例。 –

-2

Gi VEN似乎陣列(0,1)上的按鍵不被顯著一個簡單的解決方案是使用由「名稱」中引用作爲外陣列的鍵的元素的值:

["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/" 
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; 
}