php проверяет, содержит ли массив только значения элемента другого массива

Я хочу проверить, содержит ли массив только допустимые значения элементов (доступны в другом массиве).

Пример:

$allowedElements = array('apple', 'orange', 'pear', 'melon'); checkFunction(array('apple', 'orange'), $allowedElements); // OK checkFunction(array('pear', 'melon', 'dog'), $allowedElements); // KO invalid array('dog') elements 

Каков наилучший способ реализации этой функции checkFunction ($ a, $ b)?

Solutions Collecting From Web of "php проверяет, содержит ли массив только значения элемента другого массива"

 count($array) == count(array_intersect($array,$valid)); 

.. или подумать об этом;

 $array == array_intersect($array,$valid); 

Обратите внимание, что это дало бы true if (string)$elementtocheck=(string)$validelement , поэтому, по существу, можно использовать только для скаляров. Если у вас более сложные значения в вашем массиве (массивы, объекты), это не сработает. Чтобы сделать эту работу, мы немного ее изменим:

 sort($array);//order matters for strict sort($valid); $array === array_intersect($valid,$array); 

считая, что текущий порядок не имеет значения / sort() разрешено вызывать.

Вы можете использовать array_intersect() как предлагается здесь . Вот небольшая функция:

 function CheckFunction($myArr, $allowedElements) { $check = count(array_intersect($myArr, $allowedElements)) == count($myArr); if($check) { return "Input array contains only allowed elements"; } else { return "Input array contains invalid elements"; } } 

Демо!