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

时间:2018-01-09 04:27:54

标签: 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"

然后,我这样做将每个字符串分解为数组:

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

我进行切换,因为我想让它能够检查两种方式。我想知道它有什么问题。 谢谢你的帮助。

2 个答案:

答案 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);