Как вывести уникальные значения из массивов без функций массива? - PullRequest
0 голосов
/ 31 октября 2019

Мне нужно вывести уникальные значения из двух массивов, но я не могу использовать какие-либо функции массива, только оператор foreach и if. В результате должен вернуть один массив с уникальными значениями и преобразованный в строку.

Я пытался выровнять два значения, но вывод не исключен.

function uniqueNames(array $array1, array $array2){
    $output = [];
    foreach($array1 as $name1) {
        foreach($array2 as $name2) {
            if ($name1 !== $name2){
                $output[] = $name1." ";
            } 
        }
    }
    return implode(",", $output);
}

print_r(uniqueNames(['July', 'Ringold'], ['Harison', 'July', 'Antony']));```

My expected results are July, Ringold, Harison, Antony
But I get July ,July ,Ringold ,Ringold ,Ringold

1 Ответ

0 голосов
/ 31 октября 2019

Проблема заключается в том, что вы сравниваете каждый элемент с каждым элементом в следующем массиве и добавляете значение из первого массива для каждого элемента, который не соответствует.

В этом решении используется тот факт, что все ключипоскольку массив уникален, поэтому сначала он перебирает все массивы и добавляет их в накопительный массив ($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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...