Php 如何将数组与自身组合

Php 如何将数组与自身组合,php,arrays,Php,Arrays,我有大约250名员工。我有大多数员工的副本,其中一个或两个数组元素不同。如何检测和组合具有相同“empNum”的数组。下面的一个是一个例子,当组合起来时,我将有133个元素 Array ( [0] => Array ( [empNum] => 17 [wksWrkd] => 2 [trcode] => 1 [appn] =>

我有大约250名员工。我有大多数员工的副本,其中一个或两个数组元素不同。如何检测和组合具有相同“empNum”的数组。下面的一个是一个例子,当组合起来时,我将有133个元素

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查询?这给了我与上面原始数组相同的东西。