php获取多维数组的唯一值

时间:2010-03-14 13:14:27

标签: php arrays

  

可能重复:
  php multi-dimensional array remove duplicate

我有一个这样的数组:

$a = array ( 
    0 => array ( 'value' => 'America', ), 
    1 => array ( 'value' => 'England', ),  
    2 => array ( 'value' => 'Australia', ), 
    3 => array ( 'value' => 'America', ), 
    4 => array ( 'value' => 'England', ), 
    5 => array ( 'value' => 'Canada', ), 
)

如何删除重复的值以便我得到:

$a = array ( 
    0 => array ( 'value' => 'America', ), 
    1 => array ( 'value' => 'England', ),  
    2 => array ( 'value' => 'Australia', ), 
    4 => array ( 'value' => 'Canada', ), 
)

我尝试使用array_unique,但是由于这个数组是多维的,我认为这不起作用。

编辑:我还需要这个数组是多维的,并且在这种格式中,我无法压扁它。

3 个答案:

答案 0 :(得分:86)

array_unique在比较值之前使用字符串转换来查找唯一值:

  

注意:当且仅当(string) $elem1 === (string) $elem2时,才认为两个元素相等。用文字表示:当字符串表示相同时。将使用第一个元素。

但数组总是会转换为Array

var_dump("Array" === (string) array());

您可以通过在array_unique的第二个参数中指定 SORT_REGULAR 模式来解决此问题:

$unique = array_unique($a, SORT_REGULAR);

或者,如果这不起作用,则在调用array_unique之后serializing之前的数组unserializing找到唯一值:

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

答案 1 :(得分:10)

这里:)

<?php
 $a = array ( 
    0 => array ( 'value' => 'America', ), 
    1 => array ( 'value' => 'England', ),  
    2 => array ( 'value' => 'Australia', ), 
    3 => array ( 'value' => 'America', ), 
    4 => array ( 'value' => 'England', ), 
    5 => array ( 'value' => 'Canada', ), 
);

$tmp = array ();

foreach ($a as $row) 
    if (!in_array($row,$tmp)) array_push($tmp,$row);

print_r ($tmp);
?>

答案 2 :(得分:1)

使用SORT_REGULAR标志。

$unique_array = array_unique($a, SORT_REGULAR);

我不确定为什么它会有所帮助,但确实如此。至少用php 5.3