【问题标题】:PHP: Check if an array contains all array values from another arrayPHP:检查一个数组是否包含来自另一个数组的所有数组值
【发布时间】:2012-03-28 04:20:12
【问题描述】:
$all = array
(
    0 => 307,
    1 => 157,
    2 => 234,
    3 => 200,
    4 => 322,
    5 => 324
);
$search_this = array
(
    0 => 200,
    1 => 234
);

我想知道$all 是否包含所有$search_this 值并返回truefalse。请问有什么想法吗?

【问题讨论】:

标签: php arrays


【解决方案1】:

array_intersect()

$containsSearch = count(array_intersect($search_this, $all)) === count($search_this);

【讨论】:

  • 你知道你可以省略两个count() 调用吗?
  • @Wrikken 在array_intersect() 期间不能重新排序值吗?我的意思是,['a', 'b'] != ['b', 'a']
  • 即使这样:array comparison:"== 如果 $a 和 $b 具有相同的键/值对,则为 TRUE。",因此顺序不甚至重要(使用===
  • 此答案假定 $all 数组仅包含唯一值。如果不是这种情况,可以在 array_intersects 函数中的 $all 数组上使用 array_unique 函数。
  • array_diff 解决方案@orrd 给的更干净
【解决方案2】:

这个怎么样:

function array_keys_exist($searchForKeys = array(), $searchableArray) {
    $searchableArrayKeys = array_keys($searchableArray);

    return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); 
}

【讨论】:

    【解决方案3】:

    我认为您正在寻找相交函数

    array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
    

    array_intersect() 返回一个数组,其中包含 array1 的所有值 存在于所有论点中。请注意,密钥会被保留。

    http://www.php.net/manual/en/function.array-intersect.php

    【讨论】:

      【解决方案4】:

      之前的答案都比他们需要做的工作更多。只需使用array_diff。这是最简单的方法:

      $containsAllValues = !array_diff($search_this, $all);
      

      这就是你所要做的。

      【讨论】:

      • 感谢您的欢呼;我进来想array_intersect
      • 这应该是答案
      • 是的,这是更好的解决方案
      • 比相交更好的解决方案!
      • 我遇到了这个页面并使用了上述解决方案,因为它导致了重复
      【解决方案5】:

      array_diff 有点短

      $musthave = array('a','b');
      $test1 = array('a','b','c');
      $test2 = array('a','c');
      
      $containsAllNeeded = 0 == count(array_diff($musthave, $test1));
      
      // this is TRUE
      
      $containsAllNeeded = 0 == count(array_diff($musthave, $test2));
      
      // this is FALSE
      

      【讨论】:

        猜你喜欢
        • 2013-03-27
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-05
        相关资源
        最近更新 更多