PHP如何检查一个数组是否只包含另一个数组中的元素值?

3

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

示例:

$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)函数?

2个回答

5
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()函数。


1
你可以像这里建议的那样使用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";
    }
}

演示!


它的工作方式不像你想的那样。你测试过了吗 - Wrikken
@Wrikken:你是对的。我已经更新了答案。请取消踩票 :) - anon
一旦您实现了非标量比较:P(顺便问一下:我们需要两个回答都说“array_intersect”吗?) - Wrikken
这仍然是有损比较,但我的踩票至少已经消失了,因为它足以满足OP的测试用例 ;) - Wrikken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接