2013-05-03 85 views
6

我有這樣PHP數組唯一值

Array 
(
    [0] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

    [1] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

    [2] => Array 
     (
      [id] => LA 
      [name] => Lanchile 
     ) 

    [3] => Array 
     (
      [id] => LA 
      [name] => Lanchile 
     ) 

    [4] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

    [5] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

) 

數組,我想

Array 
(
    [0] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

    [1] => Array 
     (
      [id] => LA 
      [name] => Lanchile 
     ) 
) 

但使用array_unique功能之後,我只有

Array 
(
    [0] => Array 
     (
      [id] => BA 
      [name] => British Airways 
     ) 

) 

什麼我做錯了嗎?

+5

你嘗試使用'array_unique(my_array,SORT_REGULAR)'? – diegoperini 2013-05-03 11:25:07

+1

可能的重複 - http://stackoverflow.com/q/307674/608170。此外,如果此數組是查詢的結果,則需要重新檢查查詢以消除重複項。 – verisimilitude 2013-05-03 11:26:11

+1

http://stackoverflow.com/questions/6766942/php-unique-array-function-for-nested-array可能的副本 – 2013-05-03 11:27:19

回答

17
array_unique(my_array, SORT_REGULAR) 

按照評論要求。 :)

+0

非常好的解決方案,爲我工作就像一個魅力:) – 2013-10-29 16:01:11

+1

ü寧願說 - 偉大的「steallution」大聲笑 Upvoted diegoperini在正義的深切關注。 – 2014-04-06 17:17:14

+0

那天我誤讀了Niklas Ekman的建議,現在我意識到這是偷竊。不便之處敬請原諒。我反而提出了這個問題。 – diegoperini 2014-04-25 13:39:36

2
array_unique is not intended to work on multi dimensional arrays. 

您需要循環數組

array_unique

4

如前所述array_unique不支持多維數組,但你可以遍歷數據,並建立自己的

<?php 
$airlines = array(
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
); 
$tmp = array(); 
foreach ($airlines as $item) { 
    if (!in_array($item['id'], $tmp)) { 
     $unique[] = $item; 
     $tmp[] = $item['id']; 
    } 
} 

var_dump($unique); // $unqiue will have your desired results in it var_dump was just for testing 
1
$airlines = array(
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
    array('id' => 'BA', 'name' => 'British Airways'), 
    array('id' => 'LA', 'name' => 'Lanchile'), 
); 


$unique = array_map(
    'unserialize', 
    array_unique(
     array_map(
      'serialize', 
      $airlines 
     ) 
    ) 
); 

var_dump($unique); 
+0

如果元素的順序不同,則會失敗。 'array_unique($ airlines,SORT_REGULAR);'是正確的答案。 – cleong 2013-05-03 11:45:51