Если вы хотите перечислить повторяющиеся значения, я думаю, что адрес второго совпадения должен быть FSDSDS
, поскольку нет элемента с именем AAA
и значением DDSDSDA
:
BX-78 AAA FSDSDS
Если это так, то вы могли бы сначала использовать двойной foreach, чтобы пометить массивы, которые содержат повторяющиеся идентификатор или имя, например, добавив свойство с именами id
и name
, за исключением случаев, когда сам массив находится ввторой цикл.
После этого цикла вы можете сказать, какие массивы являются дублирующими.Вместо использования соответствующего индекса 0, как в id[0]
, я использовал reset и next, чтобы он не привязывался к этим индексам.
Чтобы получить отфильтрованный результат, вы можете использовать array_reduce дляпроверьте ключи массива и удалите их.
Например:
foreach ($array as $index => $a) {
foreach ($array as $v) {
if ($v === $a) continue;
if (reset($v) === reset($a)) $array[$index]["id"] = "duplicate";
if (next($v) === next($a)) $array[$index]["name"] = "duplicate";
}
}
$array = array_reduce($array, function($carry, $item) {
if (array_key_exists("id", $item) || array_key_exists("name", $item)) {
unset($item["id"], $item["name"]);
$carry[] = $item;
}
return $carry;
}, []);
print_r($array);
Результат
Array
(
[0] => Array
(
[id[0]] => BX-78
[Name[0]] => XXX
[Address[0]] => YUUSATD
)
[1] => Array
(
[id[3]] => BX-78
[Name[3]] => AAA
[Address[3]] => FSDSDS
)
[2] => Array
(
[id[4]] => BX-81
[Name[4]] => XXX
[Address[4]] => DSDSDSD
)
)
См. php demo