我有两个数组,每个数组都是从一个字符串生成的。字符串是:
$string1 = "#574390, #574387, #574386, #574383 (keyboard enter)
#574368, #574367, #574364, #574361, #574357, #574355, #574351, #574343, #574341 (keyboard enter)
#574381, #574379, #574377, #574375, #574374, #574373, #574372, #574371, #574369"
$string2 = "574390
574386
574383
574381
574379
574377
574375
574374
574373
574372
574371
574369
574368
574367
574364
574361
574357
574355
574351
574343
574341"
然后,我这样做将每个字符串分解为数组:
$str1 = checkstring($string1);
$str2 = checkstring($string2);
function checkstring($x) {
//check whether the string has "#" in it
if (!strstr($x, '#')) {
$array1 = str_replace(" ", "", $x);
$array1 = explode("\n", str_replace("\r", "", $array1));
return $array1;
}
else {
$array2 = str_replace("\r", ", ", str_replace("#", '', $x));
$array2 = array_unique(explode(", ", $array2), SORT_REGULAR);
return $array2;
}
}
之后,我试着找出两个数组之间的区别:
$result = array_diff($str1, $str2);
print_r($result);
如您所见,数组1和数组2之间的区别在于数组1中存在574387
但不存在于数组2中。我从代码中得到的结果是:
Array ( [1] => 574387 [4] => 574368 [13] => 574381 )
如果我在$string1
和$ string2之间切换值,结果将是:
Array ( [3] => 574381 [12] => 574368 )
我进行切换,因为我想让它能够检查两种方式。我想知道它有什么问题。 谢谢你的帮助。
答案 0 :(得分:4)
[array_diff]将array1与一个或多个其他数组进行比较,并返回array1中任何其他数组中不存在的值。
取自php.net
因此,它只显示array1的元素(在您的情况下为$str1
),它们与比较的数组(在您的情况下为$str2
)不同。这就是为什么574387
未在第二次比较中显示的原因。此外,还显示了其他两个差异,因为您不是使用逗号,而是在(keyboard enter)
中使用前面的$str1
。
如果您想查看两个阵列的差异,请尝试以下方法:
array_merge(array_diff($str1,$str2),array_diff($str2,$str1));
答案 1 :(得分:1)
你可以试试这个
preg_match_all('/[0-9]+/', $string1, $result);
$array1 = array_unique($result[0]);
preg_match_all('/[0-9]+/', $string2, $result);
$array2 = array_unique($result[0]);
$arrayDiff = array_merge(array_diff($array1, $array2), array_diff($array2, $array1));
print_r($arrayDiff);