#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);
Комментариев нет:
Отправить комментарий