我有一个这样的数组:
$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,但是由于这个数组是多维的,我认为这不起作用。
编辑:我还需要这个数组是多维的,并且在这种格式中,我无法压扁它。
答案 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