Php 如何将数组与自身组合
我有大约250名员工。我有大多数员工的副本,其中一个或两个数组元素不同。如何检测和组合具有相同“empNum”的数组。下面的一个是一个例子,当组合起来时,我将有133个元素Php 如何将数组与自身组合,php,arrays,Php,Arrays,我有大约250名员工。我有大多数员工的副本,其中一个或两个数组元素不同。如何检测和组合具有相同“empNum”的数组。下面的一个是一个例子,当组合起来时,我将有133个元素 Array ( [0] => Array ( [empNum] => 17 [wksWrkd] => 2 [trcode] => 1 [appn] =>
Array
(
[0] => Array
(
[empNum] => 17
[wksWrkd] => 2
[trcode] => 1
[appn] => 51000550000
[totalHours] => 20.00
[rate] => 12.00
[net] => 240.00
[overHours] => .00
[holidayHours] => .00
[overtimePay] => .00
[otherPay] => .00
[holidayPay] => .00
[ctu] => .00
[cta] => .00
[ptu] => .00
[pta] => .00
[sickHours] => .0000
[vacaHours] => .0000
[gross] => 240.00
)
[1] => Array
(
[empNum] => 17
[wksWrkd] => 2
[trcode] => 1
[appn] => 20000560000
[totalHours] => 34.00
[rate] => 12.00
[net] => 408.00
[overHours] => .00
[holidayHours] => .00
[overtimePay] => .00
[otherPay] => .00
[holidayPay] => .00
[ctu] => .00
[cta] => .00
[ptu] => .00
[pta] => .00
[sickHours] => .0000
[vacaHours] => .0000
[gross] => 408.00
)
[2] => Array
(
[empNum] => 17
[wksWrkd] => 2
[trcode] => 1
[appn] => 51000550005
[totalHours] => 54.00
[rate] => 12.00
[net] => 648.00
[overHours] => .00
[holidayHours] => .00
[overtimePay] => .00
[otherPay] => .00
[holidayPay] => .00
[ctu] => .00
[cta] => .00
[ptu] => .00
[pta] => .00
[sickHours] => .0000
[vacaHours] => .0000
[gross] => 648.00
)
[3] => Array
(
[empNum] => 17
[wksWrkd] => 2
[trcode] => 1
[appn] => 20000560005
[totalHours] => 13.00
[rate] => 12.00
[net] => 156.00
[overHours] => .00
[holidayHours] => .00
[overtimePay] => .00
[otherPay] => .00
[holidayPay] => .00
[ctu] => .00
[cta] => .00
[ptu] => .00
[pta] => .00
[sickHours] => .0000
[vacaHours] => .0000
[gross] => 156.00
)
[4] => Array
(
[empNum] => 17
[wksWrkd] => 2
[trcode] => 4
[appn] => 51000550000
[totalHours] => .00
[rate] => .00
[net] => .00
[overHours] => 4.00
[holidayHours] => 72.00
[overtimePay] => .00
[otherPay] => .00
[holidayPay] => .00
[ctu] => .00
[cta] => .00
[ptu] => .00
[pta] => .00
[sickHours] => .0000
[vacaHours] => .0000
[gross] => 72.00
)
[5] => Array
(
[empNum] => 17
[wksWrkd] => 2
[trcode] => 4
[appn] => 51000550005
[totalHours] => .00
[rate] => .00
[net] => .00
[overHours] => .25
[holidayHours] => 4.50
[overtimePay] => .00
[otherPay] => .00
[holidayPay] => .00
[ctu] => .00
[cta] => .00
[ptu] => .00
[pta] => .00
[sickHours] => .0000
[vacaHours] => .0000
[gross] => 4.50
)
[6] => Array
(
[empNum] => 17
[wksWrkd] => 2
[trcode] => 4
[appn] => 20000560005
[totalHours] => .00
[rate] => .00
[net] => .00
[overHours] => .25
[holidayHours] => 4.50
[overtimePay] => .00
[otherPay] => .00
[holidayPay] => .00
[ctu] => .00
[cta] => .00
[ptu] => .00
[pta] => .00
[sickHours] => .0000
[vacaHours] => .0000
[gross] => 4.50
)
)
我尝试了两个查询:一个是将不同的empnum放入一个数组,另一个是从上面的数组。然后我做了两个foreach,但我不知道如何将一个元素与它自己进行比较,然后在元素发生变化时转到下一个元素。我还尝试了array\u merge()和array\u merge\u recursive() 尝试下面的代码
$processedArray = array();
$finalOutput = array();
foreach($elements as $elem){
if(!in_array($elem["empNum"],$processedArray)){
$processedArray[] = $elem["empNum"];
finalOutput[] = $elem;
}
}
$finalOutput是具有唯一empNum的项的值如果两个键相同,则以第二个键为准。
If two keys are the same, the second one prevails.
Example:
<?php
print_r(array_combine(Array('a','a','b'), Array(1,2,3)));
?>
Returns:
Array
(
[a] => 2
[b] => 3
)
But if you need to keep all values, you can use the function below:
<?php
function array_combine_($keys, $values)
{
$result = array();
foreach ($keys as $i => $k) {
$result[$k][] = $values[$i];
}
array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;'));
return $result;
}
print_r(array_combine_(Array('a','a','b'), Array(1,2,3)));
?>
Returns:
Array
(
[a] => Array
(
[0] => 1
[1] => 2
)
[b] => 3
)
例子:
返回:
排列
(
[a] =>2
[b] =>3
)
但如果需要保留所有值,可以使用以下函数:
返回:
排列
(
[a] =>阵列
(
[0] => 1
[1] => 2
)
[b] =>3
)
我已在上找到此解决方案。我想这就是你要找的。你是不是先自己尝试了什么?那是什么?在这里共享。可能与我尝试过的代码重复。我不想移除任何东西。我想保留副本。您想如何管理副本?我的意思是,在前两行appn是不同的。您想同时维护这两个吗?您想如何管理重复项?我的意思是,在前两行appn是不同的。你想同时保持这两种状态吗?此外,这些值是否来自sql查询?这给了我与上面原始数组相同的东西。