array_unique для многомерных массивов

array_unique для многомерных массивов

$unique = array_unique($array);

Функция array_unique возвращает массив без повторяющихся значений, она работает и с многомерными массивами. Очисть массивы от дублей можно следующими способами:

Способ №1

$array = array_unique($array, SORT_REGULAR);
PHP

Способ №2

$array = array_map('unserialize', array_unique(array_map('serialize', $array)));
PHP

Второй способ чувствителен к типу данных, т.е. 0 => 1, и 0 => '1', будут считаться разными.

Удаление дубликатов по одному ключу

function array_unique_key($array, $key) { 
	$tmp = $key_array = array(); 
	$i = 0; 

	foreach($array as $val) { 
		if (!in_array($val[$key], $key_array)) { 
			$key_array[$i] = $val[$key]; 
			$tmp[$i] = $val; 
		} 
		$i++; 
	} 
	return $tmp; 
}
PHP

Например, в массиве нужно удалить дубликаты с одинаковым id, другие элементы массива не важны.

$test = array( 
	array(
		'id' => 1,
		'name' => 'Диски Sparco',
		'price' => 5000,
	),
	array(
		'id' => 1,
		'name' => 'Диски Sparco',
		'price' => 6000,
	), 	
	array(
		'id' => 2,
		'name' => 'Автокресло',
		'price' => 3000,
	), 

);

$test = array_unique_key($test, 'id'); 
print_r($test);
PHP

Результат:

Array(
	[0] => Array(
		[id] => 1
		[name] => Диски Sparco
		[price] => 5000
	)
	[2] => Array(
		[id] => 2
		[name] => Автокресло
		[price] => 3000
	)
)
28.06.2019, обновлено 28.05.2021
23570

Комментарии 3

Inverser Pro Inverser Pro
2 июня 2021 в 04:56
Благодарю, братик!
Юрец Юров Юрец Юров
8 июля 2023 в 17:49
Спасибо, очень умный человек! Твой сайт мне очень сильно облегчил коддинг на php!
Петр Григорьев Петр Григорьев
14 сентября 2023 в 12:57
in_array медленно работает, это будет заметно если массив большой. Тут лучше использовать другой подход. В языках, которые могут использовать разные типы структур данных это делается через HashMap(хеш-таблицы).
Массивы в php в каком то смысле как раз являются хеш-таблицами.
function array_unique_key($array, $key) {
foreach($array as $i => $val) {
if (isset($arrayHashKeys[$val[$key]]) {
unset($array[$i]);
continue;
}
$arrayHashKeys[$val[$key]] = true;
}
return $array;
}
Что тут происходит?
Мы проходимся по массиву и записываем значение каждого ключа в отдельный массив как ключ(значение можно указать любое например true). Но перед тем как записать проверяем, есть ли такой ключ в этом массиве. И если такой ключ есть значит у нас повтор, и мы удаляем элемент массива(можно не удалять, а записывать в новую переменную) и переходим к следующему элементу.
Теперь скорость выполнения заметно увеличится(в некоторых случаях в сотни раз), но вырастут затраты по памяти.

, чтобы добавить комментарий.

Другие публикации

Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
20707
+2
Пример парсинга html-страницы на phpQuery
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют...
68293
+27
Работа с директориями в PHP
Набор PHP функций для работы с директориями, получение списка файлов в папке, копирование и удаление содержимого папок.
32319
-1
Как вывести PHP массив
Примеры использования PHP функций и циклов для вывода всех элементов массива в окно браузера.
99237
+6
Поиск файлов в PHP
Для поиска файлов на сервере хорошо подходит функция glob(), которая возвращает список файлов по заданной маске, например...
26619
+1
Преобразование цветов в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
16980
-1