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