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, но это не работает из-за того, что этот массив является многомерным, я думаю.
Изменить: Мне также нужен этот массив, чтобы быть многомерным и в этом формате я не могу сгладить его.
Ответы
Ответ 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