Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Как правильно удалить дубликаты в многомерном массиве?

#php


Здравствуйте. Есть такой массив $array:

array(100) {
  [0]=>
  array(2) {
    ["id"]=>
    int(12345)
    ["date"]=>
    int(277345533)
  [1]=>array(2)
    //такие же ключи(id, date)
  [2]=>array(2)
    //такие же ключи(id, date)
  [3]//... ну и так далее      


Мне нужно убрать(или присвоить null), все элементы, у которых совпадает id(т.е. Если
есть 3 элемента с одинаковым id, должен остаться только один). Я пробовал применять
функцию array_unique():

$newarr=array_unique($array);


Но в массиве $newarr я получаю всего пару элементов из 100, хотя повторений одно-два,
а то и вообще нет. Что я делаю не так?
    


Ответы

Ответ 1



Возможно, вам стоит передавать в качестве второго параметра array_unique константу SORT_REGULAR вот так $newarr=array_unique($array, SORT_REGULAR); Согласно документации, по умолчанию используется SORT_STRING, который сравнивает элементы как строки. Если же вам нужно получать unique результаты только учитывая одно поле массива id, можете воспользоваться такой функцией, которая тоже есть в документации function unique_multidim_array($array, $key) { $temp_array = array(); $i = 0; $key_array = array(); foreach($array as $val) { if (!in_array($val[$key], $key_array)) { $key_array[$i] = $val[$key]; $temp_array[$i] = $val; } $i++; } return $temp_array; } вызываете вот так $newarr=unique_multidim_array($array, 'id');

Ответ 2



Можно поступить следующим образом 12345, 'date' => 277345533 ), array( 'id' => 12345, 'date' => 277345533 ), array( 'id' => 12345, 'date' => 277345533 ) ); $arr = array_map('unserialize', array_unique(array_map('serialize', $arr))); echo '
';
print_r($arr);


Комментариев нет:

Отправить комментарий