Проблема заключается в том, что вы сравниваете каждый элемент с каждым элементом в следующем массиве и добавляете значение из первого массива для каждого элемента, который не соответствует.
В этом решении используется тот факт, что все ключипоскольку массив уникален, поэтому сначала он перебирает все массивы и добавляет их в накопительный массив ($unique
), а затем перебирает его и получает все ключевые значения в виде списка уникальных значений ($output
)...
function uniqueNames(array $array1, array $array2){
$unique = [];
$output = [];
foreach([$array1, $array2] as $sub) {
foreach($sub as $name2) {
$unique[$name2] = null;
}
}
foreach ( $unique as $key => $value ) {
$output[] = $key;
}
return implode(",", $output);
}
В качестве альтернативы, используя if
, вам нужно выполнить цикл по одному массиву, а затем проверить все элементы в другом массиве. Только когда вы не можете найти его, вы можете сказать, что его нужно добавить. Это просто использует флаг, который изменяется, когда элемент найден ....
function uniqueNames(array $array1, array $array2){
$output = $array1;
foreach($array2 as $name2) {
$found = false;
foreach($array1 as $name1) {
if ($name1 == $name2){
$found = true;
break;
}
}
if (!$found) {
$output[] = $name2;
}
}
return implode(",", $output);
}