Как удалить уникальные элементы в многомерном массиве? - PullRequest
0 голосов
/ 19 апреля 2020

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

Мой массив выглядит следующим образом:

$array = [[0, 1, 2, 3, 4], [1, 2, 3, 4, 6]];

Мой требуемый массив должен быть:

$array = [[0, 1, 2, 3, 4], [6]];

Ответы [ 3 ]

1 голос
/ 19 апреля 2020

Вот быстрое и грязное решение для вас:

Рекурсивно просматривайте каждый элемент массива, и если вы не видели элемент, установите для него значение null (сброс его по некоторым причинам не работает) , Затем отфильтруйте получившиеся вложенные массивы.

$array = [[0, 1, 2, 3, 4], [1, 2, 3, 4, 6]];
$seen = [];
array_walk_recursive($array, function (&$v) use (&$seen) {
    if (!array_key_exists($v, $seen) {
       $seen[$v] = true;
    } else {
       $v = null;
    }
});
$final = array_map('array_filter', $array);
0 голосов
/ 19 апреля 2020

$serialize=array_map('serialize',$array);
$unique=array_unique($serialize);

$result=array_map('unserialize',$uniue);

print_r($result);

0 голосов
/ 19 апреля 2020

Если используются функции array_diff () и array_values ​​(), решение может быть доставлено в одной строке кода:

$array = [[0, 1, 2, 3, 4], [1, 2, 3, 4, 6]];

$array[1] = array_values(array_diff($array[1],$array[0]));

var_export($array);

Вывод:

array (
  0 => 
  array (
    0 => 0,
    1 => 1,
    2 => 2,
    3 => 3,
    4 => 4,
  ),
  1 => 
  array (
    0 => 6,
  ),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...