2013-05-03 79 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