php检查一个数组是否只包含另一个数组的元素值


php check if an array only contains element values of another array

我想检查一个数组是否只包含允许的元素值(在另一个数组中可用)。

示例:

$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);

请注意,如果(string)$elementtocheck=(string)$validelement,那么这将产生true,因此本质上仅适用于标量。如果您的数组中有更复杂的值(数组、对象),这将不起作用。为了使工作,我们对其进行了一些更改:

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";
    }
}

演示