【发布时间】:2018-03-19 09:23:31
【问题描述】:
我有下面的 PHP 代码将检查两个关联数组。我的问题是,这段代码执行了很多循环,我不希望它影响我的应用程序的性能。 PHP中是否有任何方法或功能可以自动检测重复?结果和我的一样。
请查看示例here。
这是我的代码:
// first Array
$m1Array = array();
$m1Array[] = array('eId' => '0001', 'numVal' => 1);
$m1Array[] = array('eId' => '0002', 'numVal' => 2);
$m1Array[] = array('eId' => '0003', 'numVal' => 3);
$m1Array[] = array('eId' => '0004', 'numVal' => 4);
$m1Array[] = array('eId' => '0005', 'numVal' => 5);
$m1Array[] = array('eId' => '0006', 'numVal' => 6);
//second Array
$m2Array = array();
$m2Array[] = array('eId' => '0001', 'numVal' => 1);
$m2Array[] = array('eId' => '0004', 'numVal' => 4);
$m2Array[] = array('eId' => '0005', 'numVal' => 5);
$m2Array[] = array('eId' => '0006', 'numVal' => 6);
$m2Array[] = array('eId' => '0007', 'numVal' => 7);
//final result array
$finalResult = array();
//[seond array] will be my master or the bases
//loop thru the [second array(m2Array)]
foreach($m2Array as $m2Arr){
$numValSum = 0;
$dupFound = false;
//get current eId value in [second array]
$eId2 = $m2Arr['eId'];
//loop thru the [first array(m1Array)] to check if eId2 has duplicate
$arrIndex = 0;
foreach($m1Array as $m1Arr){
//get current eId value in [first array]
$eId1 = $m1Arr['eId'];
//check if the value of eId2 is equal to eId 1
if($eId1 == $eId2){
//if equal then
//add their respective numVal value and put it to [final result array]
$numValSum = $m2Arr['numVal'] + $m1Arr['numVal'];
$finalResult[] = array('eId' => $eId2, 'numValSum' => $numValSum);
unset($m1Array[$arrIndex]); //remove the duplicate eId in [first array]
sort($m1Array); //sort the index of [first array]
$dupFound = true;
}
$arrIndex += 1;
}
//if eId2 has no duplicate then just add the numVal to [final result array]
if($dupFound == false){
$finalResult[] = array('eId' => $eId2, 'numValSum' => $m2Arr['numVal']);
}
}
//now check if [second array] still have an element
//if still have then add all to [final result array]
if(count($m1Array)){
foreach($m1Array as $m1Arr){
$finalResult[] = array('eId' => $m1Arr['eId'], 'numValSum' => $m1Arr['numVal']);
}
}
//display my final result array
foreach($finalResult as $fRes){
echo $fRes['eId'].' -> '.$fRes['numValSum'].PHP_EOL;
}
附加信息:
抱歉,我认为你们中的一些人错过了我的代码的要点。我不想删除数组中的重复项。该代码将检查重复投注。两个数组,如果 eId 在另一个数组中有重复项,则在将其添加到我的 output 或 finalResult array 之前添加它们对应的 numVal。但是如果没有重复的话直接发到我的finalResult array。
我附上了一张表格图,说明它是如何工作的。希望这可以帮助。谢谢。
【问题讨论】:
-
不,不是。 Co'z 在我的情况下,我不是在寻找重复的键。我正在寻找我的
eId键中的重复值并添加numVal键的值。但是,也许这会对我有所帮助。我将尝试检查一些建议并尝试将其应用到我的代码中。谢谢。 -
所以当值匹配时——你把它相加。那不匹配的时候怎么办?
-
如图所示,它将直接转到我的
finalResult数组。顺便说一句,@Aniket 已经给了我更短的代码。我认为这就是我正在寻找的代码。我只是想让我的代码更短更干净。非常感谢您抽出宝贵时间@sevavietl。我很感激!
标签: php arrays duplicates