Массивы (многомерные массивы). Удаление повторяющихся элементов в массиве на php. Задание a1
Задачи на общий уровень владения языком
ответом на каждую из задач должен быть код
Для всех заданий с массивами задан многомерный массив, элементы которого могут содержать одинаковые id:
$array = [
[id => 1, date => "12.01.2020", name => "test1" ...],
[id => 2, date => "02.05.2020", name => "test2" ...],
[id => 4, date => "08.03.2020", name => "test4" ...],
[id => 1, date => "22.01.2020", name => "test1" ...],
[id => 2, date => "11.11.2020", name => "test4" ...],
[id => 3, date => "06.06.2020", name => "test3" ...],
]
Все решения постараться реализовать НЕ используя циклы for / foreach.
1. выделить уникальные записи (убрать дубли) в отдельный массив. в конечном массиве не должно быть элементов с одинаковым id.
На выходе:
$array = [
[id => 1, ...],
[id => 2, ...],
[id => 4, ...],
[id => 3, ...],
]
Примеры
Пример 1
<? $a0 = array ("Красный", "Желтый", "Красный", "Белый", "Красный"); $r0 = array_unique ($a0); print_r ($r0) ?>
Array ( [0] => Красный [1] => Желтый [3] => Белый )
<? $a1 = array ("Репа", "Лук", "Репа", "Мак", "Репа"); $r1 = array_diff ($a1, array_diff_assoc ($a1, array_unique ($a1))); print_r ($r1) ?>
Array ( [1] => Лук [3] => Мак )
<? $a2 = array ("Бак", "Таз", "Бак", "Ваза", "Бак"); $r2 = array_diff_assoc ($a2, array_unique ($a2)); print_r ($r2) ?>
Array ( [2] => Бак [4] => Бак )
Объяснение:
С помощью array_unique удаляются уникальные значения.
С помощью array_diff_assoc находятся расхождения с учетом ключей.
С помощью array_diff, который не учитывает ключи, убираются эти повторения.
Пример 2
В массиве нужно удалить дубликаты с одинаковым id, другие элементы массива не важны.
<? $b1 = array (
array ('id' => 1, 'name' => 'Дом', 'price' => 5),
array ('id' => 1, 'name' => 'Дом', 'price' => 6),
array ('id' => 2, 'name' => 'Кол', 'price' => 3),
);
function q1 ($b1, $k1) {$t1 = $k1_a1 = array(); $i1 = 0; foreach ($b1 as $v1) {if (!in_array ($v1[$k1], $k1_a1)) {$k1_a1[$i1] = $v1[$k1]; $t1[$i1] = $v1;} $i1++;} return $t1;};
$b1 = q1 ($b1, 'id'); print_r ($b1) ?>
Результат:
Array ( [0] => Array ( [id] => 1 [name] => Дом [price] => 5 ) [2] => Array ( [id] => 2 [name] => Кол [price] => 3 ) )
Array ( [0] => Array ( [id] => 1 [name] => Дом [price] => 5 ) [2] => Array ( [id] => 2 [name] => Кол [price] => 3 ) )
Решение:
<? function q2 ($array, $k2) {$t2 = $d2 = array(); $i2 = 0; foreach ($array as $v2) {if (!in_array ($v2[$k2], $d2)) {$d2[$i2] = $v2[$k2]; $t2[$i2] = $v2;} $i2++;} return $t2;}; $b2 = q2 ($array, 'id'); print_r ($b2) ?>
Array ( [0] => Array ( [id] => 1 [date] => 12.01.2020 [name] => test1 ) [1] => Array ( [id] => 2 [date] => 02.05.2020 [name] => test2 ) [2] => Array ( [id] => 4 [date] => 08.03.2020 [name] => test4 ) [5] => Array ( [id] => 3 [date] => 06.06.2020 [name] => test3 ) )