我有两个数组,每个数组都是从一个字符串生成的。字符串是:
$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"
Run Code Online (Sandbox Code Playgroud)
然后,我这样做是为了将每个字符串分解为数组:
$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;
}
}
Run Code Online (Sandbox Code Playgroud)
之后,我尝试找到两个数组之间的区别:
$result = array_diff($str1, $str2);
print_r($result);
Run Code Online (Sandbox Code Playgroud)
如您所见,数组 1 和数组 2 之间的区别在于,在数组 1 中存在574387但在数组 2 中没有。我从代码中得到的结果是这样的:
Array ( [1] => 574387 [4] => 574368 [13] => 574381 )
Run Code Online (Sandbox Code Playgroud)
如果我在$string1$string2 和 $string2之间切换值,结果将是:
Array ( [3] => 574381 [12] => 574368 )
Run Code Online (Sandbox Code Playgroud)
我进行切换是因为我想让它能够双向检查。我想知道有什么问题。谢谢您的帮助。
[array_diff] 将 array1 与一个或多个其他数组进行比较,并返回 array1 中不存在于任何其他数组中的值。
摘自php.net
因此,它只显示 array1 的元素(在您的情况下$str1),它们与比较的数组(在您的情况下$str2)不同。这就是为什么574387没有在第二次比较中显示的原因。此外,还显示了其他两个不同之处,因为您(keyboard enter)在$str1.
如果您想查看两个数组的差异,请尝试以下操作:
array_merge(array_diff($str1,$str2),array_diff($str2,$str1));
Run Code Online (Sandbox Code Playgroud)