PHP中的子数组比较

时间:2014-03-27 14:22:31

标签: php comparison arrays

我试图将子数组与带有主数组的索引进行比较。我尝试使用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的内置函数可以实现这一点吗?提前谢谢。

4 个答案:

答案 0 :(得分:1)

如果你想检查密钥是否匹配,你应该使用array_intersect_assoc()

if (array_intersect_assoc ($a,$b)==$b) {} else {}

假设$ a是完整数组而$ b是要测试的子集。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为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()替换为您喜欢的回调并获利:)

干杯

答案 3 :(得分:0)

$array3 = array_diff($array2,$array1); //array2 is checking either present or not in array1

并检查array3是否为空。如果array3为空则匹配,如果不为空则不匹配。