如果一个PHP数组中存在值,则向第二个数组添加值

时间:2011-10-12 22:30:35

标签: php arrays

我有两个PHP数组。一个包含一个组名,另一个包含工资工资值。

$group_wages_array = Array ( [0] => 1 [1] => 4 [2] => 1 [3] => 3 );

这意味着计划中有四名员工。两个分配给组1,另一个分配给组4,最后一个分配给组3。

第二个数组如下:

$tot_wages_array = Array ( [0] => 500 [1] => 44 [2] => 80 [3] => 11.25 );

这是每个员工工资的示例数组。这两个数组都是按顺序构造的,因为它在mysql while循环中添加了值,因为它从数据库中提取信息。


稍后,我将两个数组合并为一个数组,其中键是组号,值是该组的总工资:

$combined_group_wages = array_combine($group_wages_array, $tot_wages_array);

当多个员工被分配到同一个组时,这就像一个魅力除外。这些数组是在mysql while循环中构建的,因为它循环遍历每个员工的信息:

array_push($tot_wages_array, $totemp_wages_sch); // Add their wage to the array
array_push($group_wages_array, $emp_data['group_id']); // Add their group to the array

我不需要将数据推送到数组,而是需要这样做...我知道英语,但我不知道如何编码:

如果$ emp_data ['group_id']作为$ group_wages_array中的值存在,则不向此数组添加任何内容,但获取密钥。将$ totemp_wages_sch添加到$ tot_wages_array其中key = group_wages_array key

我知道这听起来更像是一个SQL查询,但我必须按顺序保存键和值,以便以后可以在页面中组合它们。如果我可以正常工作,示例中显示的数组将是:

$group_wages_array = Array ( [0] => 1 [1] => 4 [2] => 3 );
$tot_wages_array = Array ( [0] => 580 [1] => 44 [2] => 11.25 );

$combined_group_wages = array_combine($group_wages_array, $tot_wages_array);

$combined_group_wages = Array ( [1] => 580 [4] => 44 [3] => 11.25 );

...我必须使用PHP来完成这项工作。有什么想法吗?


我想出了一个基于下面提交的两个答案组合的解决方案。这是它可以帮助某人:

        if(in_array($emp_data['group_id'], $group_wages_array)){
        $key = key($group_wages_array); 
        $tot_wages_array[$key] += $totemp_wages_sch;

        } else {

        array_push($group_wages_array, $emp_data['group_id']);      
        array_push($tot_wages_array, $totemp_wages_sch);
        }

2 个答案:

答案 0 :(得分:2)

应该这样做:

$group_wages_array = array(1, 4, 1, 3);
$tot_wages_array = array(500, 44, 80, 11.25);

$combined_group_wages = array();

for ($i=0; $i<count($group_wages_array); $i++) {
    $group = $group_wages_array[$i];
    if (array_key_exists($group_wages_array[$group], $combined_group_wages)) {
        $combined_group_wages[$group] += $tot_wages_array[$i];
    } else {
        $combined_group_wages[$group] = $tot_wages_array[$i];
    }

}

print_r($combined_group_wages);

收率:

Array
(
    [1] => 580
    [4] => 44
    [3] => 11.25
)

但我建议您切换到使用对象来更好地表示您的数据。

答案 1 :(得分:1)

如果我能看到整个代码会有很多帮助,但这里的英文转换为php。向我展示更多代码,我可以完善它,直到那时尝试这个 - &gt;

if(in_array($emp_data['group_id'], $group_wages_array)){
    $key = key($group_wages_array);
    $tot_wages_array[$key] = $totemp_wages_sch;
} else {
    array_push($group_wages_array, $emp_data['group_id']);
}