PHP 中的子数组比较


Sub Array comparison in PHP

我正在尝试将子数组与索引与主数组进行比较。我尝试使用array_diffarray_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