【问题标题】:php check if an array only contains element values of another arrayphp 检查一个数组是否只包含另一个数组的元素值
【发布时间】:2013-08-15 15:00:07
【问题描述】:

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

例子:

$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) 函数的最佳方法是什么?

【问题讨论】:

    标签: php arrays


    【解决方案1】:
    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()被允许调用。

    【讨论】:

      【解决方案2】:

      您可以按照建议的here 使用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";
          }
      }
      

      Demo!

      【讨论】:

      • 这不像你想象的那样工作。 Did you test it?
      • @Wrikken:你是对的。我已经更新了答案。请删除downvote :)
      • 一旦你实现了非标量比较:P(顺便说一句:我们是否需要 2个回答说array_intersect?)
      • 这仍然是有损比较,但我的反对票至少已经消失,因为它足以满足 OP 测试用例 ;)
      猜你喜欢
      • 2020-11-21
      • 2017-03-03
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多