удаление элементов из массива - они НЕ появляются в другом массиве в PHP - PullRequest
0 голосов
/ 05 мая 2020

У меня есть функция, которая принимает на вход массив. ("$ inputArr")

массив имеет белый список разрешенных элементов, которые он может содержать. (указан массив с именем "$ allowedArr").

Я хочу отфильтровать любые элементы во входном массиве, которых нет в белом списке $ allowedArr.

Мне нужно сохранить $ allowedArr массив.

Я знаю, как это сделать, используя foreach l oop (код ниже), но мне было интересно, есть ли в PHP встроенная функция, которая может сделать это более эффективно. (без al oop) array_diff не будет работать, потому что он делает противоположное тому, что я пытаюсь выполнить sh - потому что я не ищу то, что отличает два массива, а то, что похоже


$result = myFunc(array('red', 'green', 'yellow', 'blue'));

function myFunc(array $inputArr){
    $allowedArr = array('green', 'blue');
    $filteredArr = array();

    foreach ($inputArr as $inputElement){
        if(in_array($inputElement, $allowedArr)){
            array_push($filteredArr, $inputElement);
        }
    }

    return $filteredArr;
}

результат, который я пытаюсь получить, в данном случае для $ result:

array ('blue', 'green')

Ответы [ 2 ]

3 голосов
/ 05 мая 2020

Да, вы можете использовать встроенную функцию intersect:

$input = array('red', 'green', 'yellow', 'blue');

$whitelist = array('green', 'blue');

$filteredInput = array_intersect($input, $whitelist);
0 голосов
/ 05 мая 2020

Выглядит просто для такого типа структуры, и я думаю, что вы можете просто использовать

$allowed = ['blue', 'green'];

$result = array_intersect(['blue','green','yellow','red'], $allowed);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...