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, но это не работает из-за этого массива, являющегося многомерным, я думаю.

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

32
задан Community 23 May 2017 в 11:55
поделиться

3 ответа

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

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

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

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

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

$unique = array_unique($a, SORT_REGULAR);

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

$unique = array_map('unserialize', array_unique(array_map('serialize', $a)));
86
ответ дан 27 November 2019 в 19:57
поделиться

Здесь:)

<?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);
?>
10
ответ дан 27 November 2019 в 19:57
поделиться

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

$unique_array = array_unique($a, SORT_REGULAR);

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

1
ответ дан 27 November 2019 в 19:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: