Подтвердить что ты не робот

Php получает уникальные значения многомерного массива

Возможный дубликат:
многомерный массив 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', ), 
)

Как удалить повторяющиеся значения, чтобы получить следующее:

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

Я попытался использовать array_unique, но это не работает из-за того, что этот массив является многомерным, я думаю.

Изменить: Мне также нужен этот массив, чтобы быть многомерным и в этом формате я не могу сгладить его.

4b9b3361

Ответ 1

array_unique использует преобразование строк перед сравнением значений для поиска уникальных значений:

Примечание. Два элемента считаются равными тогда и только тогда, когда (string) $elem1 === (string) $elem2. В словах: когда строковое представление одно и то же. Будет использоваться первый элемент.

Но массив всегда будет преобразовываться в Array:

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

Вы можете решить эту проблему, указав режим SORT_REGULAR во втором параметре array_unique:

$unique = array_unique($a, SORT_REGULAR);

Или, если это не работает, сериализует массивы до и unserializing после вызова array_unique для поиска уникальных значений:

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

Ответ 2

Здесь:)

<?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);
?>

Ответ 3

Использовать флаг SORT_REGULAR.

$unique_array = array_unique($a, SORT_REGULAR);

Я не уверен, почему это помогает, но это так. По крайней мере, с php 5.3