在php中我的array_diff不太对劲

时间:2015-05-25 00:05:10

标签: php

所以这是我遗传算法的代码:

// Set up male dominant traits
$maleDom = 'WT';
// Set up male recessive traits
$maleRec = 'ba,b,ec';
// Set up male snow traits
$maleSnow = '';

// Set up female dominant traits
$femaleDom = 'WT';
// Set up female recessive traits
$femaleRec = 'ba,b,mp';
// Set up female snow traits
$femaleSnow = '';

$maleRecArray = explode(',', $maleRec);
$femaleRecArray = explode(',', $femaleRec);

$nonMatchedRecessives = array_diff($maleRecArray, $femaleRecArray);

抛出Array ( [2] => ec )。但是您可以看到ecmp存在于不同的数组中。所以它肯定应该显示mp,因为它与另一个数组不同?

3 个答案:

答案 0 :(得分:2)

你需要运行它两次,以相反的顺序比较2个数组,如下所示:

array_merge(array_diff($maleRecArray, $femaleRecArray), array_diff($femaleRecArray, $maleRecArray));

哪个吐出来:

Array
(
    [0] => ec
    [1] => mp
)

Example

答案 1 :(得分:0)

请检查:http://php.net/manual/en/function.array-diff.php

操作部分是:

  

将array1与一个或多个其他数组进行比较并返回   array1中的值,不存在于任何其他数组中。

编辑:[回答你的第二个问题]来自时髦:

$nonMatchedRecessivesMale = array_diff($maleRecArray, $femaleRecArray);
$nonMatchedRecessivesFemale = array_diff($femaleRecArray, $maleRecArray);

答案 2 :(得分:0)

这就是答案。请阅读下面的详细信息。 tldr; array_diff()是单程检查。

$fullDiff = array_merge(array_diff($femaleRecArray,$maleRecArray), array_diff($maleRecArray, $femaleRecArray));

这是array_diff()的预期行为。

你得到了这两个数组之间的区别,所以无论哪种方式,ecmp都是正确的。

所以这给你两个数组之间的区别:

array_diff($femaleRecArray,$maleRecArray);array_diff($maleRecArray, $femaleRecArray);

我刚换过他们的位置。

array(3) {
  [0]=>
  string(2) "ba"
  [1]=>
  string(1) "b"
  [2]=>
  string(2) "ec"
}
array(3) {
  [0]=>
  string(2) "ba"
  [1]=>
  string(1) "b"
  [2]=>
  string(2) "mp"
}
array(1) {
  [2]=>
  string(2) "mp"
}

使用代码here