В мире PHP-программирования работа с массивами — обычная задача. Часто вы можете столкнуться с ситуациями, когда вам нужно удалить повторяющиеся значения из массива. Хотя функция array_uniqueявляется удобным инструментом для достижения этой цели, при работе с многомерными массивами она может работать не так, как ожидалось. В этой статье мы рассмотрим различные методы достижения уникальности в многомерных массивах PHP, попутно предоставляя примеры кода и разговорные пояснения.
Метод 1: использование цикла и рекурсивного уникального массива
Один из способов добиться уникальности массива в многомерном массиве — использовать цикл и рекурсивно применять функцию array_uniqueк каждому вложенному массиву. Этот метод гарантирует обработку всех уровней массива и удаление дубликатов. Вот пример:
function recursiveArrayUnique($array) {
foreach ($array as &$value) {
if (is_array($value)) {
$value = recursiveArrayUnique($value);
}
}
$array = array_unique($array);
return $array;
}
$multidimensionalArray = [
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[1, 2, 3]
];
$uniqueArray = recursiveArrayUnique($multidimensionalArray);
print_r($uniqueArray);
Метод 2: выравнивание массива и использование уникального массива
Другой подход заключается в преобразовании многомерного массива в одномерный массив с последующим применением функции array_unique. Этот метод упрощает проверку уникальности за счет преобразования структуры массива. Вот пример:
function flattenArray($array) {
$result = [];
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $value) {
$result[] = $value;
}
return $result;
}
$multidimensionalArray = [
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[1, 2, 3]
];
$flattenedArray = flattenArray($multidimensionalArray);
$uniqueArray = array_unique($flattenedArray);
print_r($uniqueArray);
Метод 3: использование функции сопоставления массива
Функция array_mapможет использоваться для перебора каждого элемента многомерного массива и применения функции array_uniqueдля удаления дубликаты. Вот пример:
function arrayUniqueMapper($array) {
return array_unique($array);
}
$multidimensionalArray = [
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[1, 2, 3]
];
$uniqueArray = array_map('arrayUniqueMapper', $multidimensionalArray);
print_r($uniqueArray);