我正在尝试将子数组与索引与主数组进行比较。我尝试使用array_diff
、array_intersect_key
等,但除了使用愚蠢的for
循环和做一些老派的方法外,找不到继续的方法。
好的,让我澄清一下我的问题。比如说,我有两个数组:
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
[5] => W
[6] => o
[7] => r
[8] => l
[9] => d
[10] => !
)
Array
(
[1] => e
[5] => W
[7] => r
[10] => !
)
第一个是完整字符串的主数组:HelloWorld!
,第二个是子数组,它有一些选定的索引及其值,由用户给出。这也可能是错误的,例如:
Array
(
[1] => F
[5] => a
[7] => 6
[10] => t
)
现在,当我传递第一个数组时,它显然应该返回true
,下一个应该返回false
。使用 PHP 的内置函数可以做到这一点吗?提前谢谢。
如果还想检查键是否匹配,则应使用 array_intersect_assoc((
if (array_intersect_assoc ($a,$b)==$b) {} else {}
鉴于$a是完整的数组,并且$b要测试的子集。
我认为array_intersect_uassoc()
是你正在寻找的功能。它基于键和值进行比较。下面是一个快速示例:
$array1 = array(0 => 'h', 1 => 'e', 2 => 'l', 3 => 'o');
$array2 = array(0 => 'h', 1 => 'e');
$array3 = array(0 => 'h', 1 => 'z');
var_dump(array_intersect_uassoc($array1, $array2, 'strcasecmp'));
var_dump(array_intersect_uassoc($array1, $array3, 'strcasecmp'));
输出:
array(2) {
[0]=>
string(1) "h"
[1]=>
string(1) "e"
}
array(1) {
[0]=>
string(1) "h"
}
然后,将第二个数组的大小与返回数组的大小进行比较 - 如果它们相等,则所有匹配项都是正确的。如果返回的数组较小 - 第二个数组中存在错误。
将strcasecmp()
替换为您喜欢的回调和利润:)
干杯
$array3 = array_diff($array2,$array1); //array2 is checking either present or not in array1
并检查 array3 是否为空。如果 array3 为空则匹配,如果不为空则表示不匹配。
if (array_diff_assoc($array2, $array1)) {
echo 'array 2 is not an exact subset of array 1';
}
array_diff_assoc
返回$array2
中不在 $array1
中的所有元素。因此,如果数组 2 是数组 1 的子集,则返回值为空数组,其计算结果为 false
,否则为非空数组,其计算结果为 true
。