$all = array ( 0 => 307, 1 => 157, 2 => 234, 3 => 200, 4 => 322, 5 => 324 ); $search_this = array ( 0 => 200, 1 => 234 );
我想知道$all是否包含所有的$search_this值并返回true或false。
$all
$search_this
true
false
x9ybnkn61#
前面的答案都做了比实际需要更多的工作。只要使用array_diff。这是最简单的方法:
$containsAllValues = !array_diff($search_this, $all);
这就是你要做的。
inkz8wg92#
看看array_intersect()。
$containsSearch = count(array_intersect($search_this, $all)) === count($search_this);
对于关联数组,请查看array_intersect_assoc()。或者,对于子数组的递归比较,请尝试:
<?php namespace App\helpers; class Common { /** * Recursively checks whether $actual parameter includes $expected. * * @param array|mixed $expected Expected value pattern. * @param array|mixed $actual Real value. * @return bool */ public static function intersectsDeep(&$expected, &$actual): bool { if (is_array($expected) && is_array($actual)) { foreach ($expected as $key => $value) { if (!static::intersectsDeep($value, $actual[$key])) { return false; } } return true; } elseif (is_array($expected) || is_array($actual)) { return false; } return (string) $expected == (string) $actual; } }
cpjpxq1n3#
使用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
fd3cxomn4#
我想你是在找一个
array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
array_intersect()返回一个数组,其中包含array1的所有参数中存在的所有值。请注意,键是保留的。http://www.php.net/manual/en/function.array-intersect.php
array_intersect()
kr98yfug5#
不如这样:
function array_keys_exist($searchForKeys = array(), $searchableArray) { $searchableArrayKeys = array_keys($searchableArray); return count(array_intersect($searchForKeys, $searchableArrayKeys)) == count($searchForKeys); }
siv3szwd6#
其他答案适用于给定的用例,但是,如果您检查“[] exists in $all“,则可能会得到误报。使用array_diff()说明这种边缘情况的一种方法如下:
[]
array_diff()
function hasAllElems(array $arr1, array $arr2): bool { if (empty($arr1) && ! empty($arr2)) { return false; } return ! array_diff($arr1, $arr2); } $searchThis = [0 => 200, 1 => 234]; $all = [0 => 307, 1 => 157, 2 => 234, 3 => 200, 4 => 322, 5 => 324]; var_dump(hasAllElems($searchThis, $all)); // true var_dump(hasAllElems($all, $searchThis)); // false var_dump(hasAllElems([], $all)); // false var_dump(hasAllElems($searchThis, [])); // false
这里,通过进行显式检查(即,如果第一个数组为空,第二个数组不为空),可以在代码的早期返回false。当然,您也可以使用array_intersect()或循环来实现相同的目的。为那些有兴趣了解更多信息的人编写了一个blog post。
6条答案
按热度按时间x9ybnkn61#
前面的答案都做了比实际需要更多的工作。只要使用array_diff。这是最简单的方法:
这就是你要做的。
inkz8wg92#
看看array_intersect()。
对于关联数组,请查看array_intersect_assoc()。
或者,对于子数组的递归比较,请尝试:
cpjpxq1n3#
使用array_diff时稍短
fd3cxomn4#
我想你是在找一个
array_intersect()
返回一个数组,其中包含array1的所有参数中存在的所有值。请注意,键是保留的。http://www.php.net/manual/en/function.array-intersect.php
kr98yfug5#
不如这样:
siv3szwd6#
其他答案适用于给定的用例,但是,如果您检查“
[]
exists in$all
“,则可能会得到误报。使用array_diff()
说明这种边缘情况的一种方法如下:这里,通过进行显式检查(即,如果第一个数组为空,第二个数组不为空),可以在代码的早期返回
false
。当然,您也可以使用
array_intersect()
或循环来实现相同的目的。为那些有兴趣了解更多信息的人编写了一个blog post。