Я хочу проверить, содержит ли массив только допустимые значения элементов (доступны в другом массиве).
Пример:
$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)?
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"; } }