Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的数组_diff有点不太正确_Php - Fatal编程技术网

php中的数组_diff有点不太正确

php中的数组_diff有点不太正确,php,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 $fema

这是我遗传计算器的代码:

// 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);
它抛出
数组([2]=>ec)
。但是您可以看到,
ec
mp
存在于不同的数组中。因此,它肯定也应该显示
mp
,因为它与其他阵列不同?

请检查:

操作部分是:

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

编辑:[回答第二个问题]从臀部开始:

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

这就是答案。请阅读下面的详细内容。tldr<代码>数组_diff()是单向检查

$fullDiff = array_merge(array_diff($femaleRecArray,$maleRecArray), array_diff($maleRecArray, $femaleRecArray));
这是
数组_diff()
的预期行为

您可以得到这两个数组之间的差异,因此无论哪种方式,
ec
mp
都是正确的

因此,这将为您提供两个阵列之间的差异:

array_diff($femaleRecArray,$maleRecArray)
数组_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"
}

反复使用代码。

您需要运行两次,按相反顺序比较两个数组,如下所示:

array_merge(array_diff($maleRecArray, $femaleRecArray), array_diff($femaleRecArray, $maleRecArray));
它吐出:

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

好的,那么我如何才能找到两个数组中的差异呢?要获得两个数组中的差异,请执行函数两次,第二次反转参数,可以选择合并结果:
$nonMatchedRecessives=array\u merge(array\u diff($maleRecArray,$femaleRecArray),array\u diff($femaleRecArray,$maleRecArray))哦,这完全有道理!谢谢:为了扩展这个答案,这是因为
array_diff()
比较了数组A中存在的元素和数组B中不存在的元素,因此需要对其进行双向区分。在这方面已经有问题了。