Страницы

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

вторник, 27 ноября 2018 г.

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

Здравствуйте. Есть такой массив $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, хотя повторений одно-два, а то и вообще нет. Что я делаю не так?


Ответ

Возможно, вам стоит передавать в качестве второго параметра 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');

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

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