php获取多维数组的唯一值

Mar*_*ark 32 php arrays

可能重复:
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', ), 
)
Run Code Online (Sandbox Code Playgroud)

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

$a = array ( 
    0 => array ( 'value' => 'America', ), 
    1 => array ( 'value' => 'England', ),  
    2 => array ( 'value' => 'Australia', ), 
    4 => array ( 'value' => 'Canada', ), 
)
Run Code Online (Sandbox Code Playgroud)

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

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

Gum*_*mbo 86

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

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

但是数组总是会转换为Array:

var_dump("Array" === (string) array());
Run Code Online (Sandbox Code Playgroud)

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

$unique = array_unique($a, SORT_REGULAR);
Run Code Online (Sandbox Code Playgroud)

或者,如果这不起作用,通过在调用查找唯一值之前序列数组并反序列化array_unique:

$unique = array_map('unserialize', array_unique(array_map('serialize', $a)));
Run Code Online (Sandbox Code Playgroud)


Mar*_*rcx 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);
?>
Run Code Online (Sandbox Code Playgroud)