如何获取另一个数组中不存在的数组值

rho*_*g23 1 php arrays

我有两个数组,每个数组都是从一个字符串生成的。字符串是:

$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)

我进行切换是因为我想让它能够双向检查。我想知道有什么问题。谢谢您的帮助。

Ges*_*ode 5

[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)