将数据添加到多维数组

时间:2014-07-04 14:43:05

标签: php arrays database merge intersect

我在向数组中添加数据时遇到了一些问题。我的第一个数据有一些数据,如下面的代码:

array1
{projectId: 1, task: 1, hoursEstimated: 345},
{projectId: 1, task: 4, hoursEstimated: 274},
{projectId: 2, task: 1, hoursEstimated: 432},
{projectId: 2, task: 2, hoursEstimated: 347},
{projectId: 2, task: 4, hoursEstimated: 815},

array2
{projectId: 1, task: 1, totalHoursWorked: 145},
{projectId: 1, task: 2, totalHoursWorked: 234},
{projectId: 1, task: 3, totalHoursWorked: 283},
{projectId: 1, task: 4, totalHoursWorked: 174},
{projectId: 2, task: 1, totalHoursWorked: 205},
{projectId: 2, task: 2, totalHoursWorked: 153},
{projectId: 2, task: 3, totalHoursWorked: 634},
{projectId: 2, task: 4, totalHoursWorked: 815},

所以我想要做的是:array2必须做的是匹配数组1的taskId和projectId并附加数据。因此,对于de数组中的第一个元素,它将成为:

Array3
{projectId: 1, task: 1, hoursEstimated: 345, totalHoursWorked: 145}
etc..

3 个答案:

答案 0 :(得分:1)

foreach($data1 as $key => &$value){
    foreach($data2 as $k => $v){
        if($v['projectId'] == $value['projectId'] && $v['task'] == $value['task']){
            $value['totalHoursWorked'] = $v['totalHoursWorked'];
        }
    }
}

答案 1 :(得分:1)

根据您的虚拟值,您可以使用foreach并使用&引用数组1。例如:

$array1 = array(
    array('projectId' => 1, 'task' => 1, 'hoursEstimated' => 345),
    array('projectId' => 1, 'task' => 4, 'hoursEstimated' => 274),
    array('projectId' => 2, 'task' => 1, 'hoursEstimated' => 432),
    array('projectId' => 2, 'task' => 2, 'hoursEstimated' => 347),
    array('projectId' => 2, 'task' => 4, 'hoursEstimated' => 815),
);

$array2 = array(
    array('projectId' => 1, 'task' => 1, 'totalHoursWorked' => 145),
    array('projectId' => 1, 'task' => 2, 'totalHoursWorked' => 234),
    array('projectId' => 1, 'task' => 3, 'totalHoursWorked' => 283),
    array('projectId' => 1, 'task' => 4, 'totalHoursWorked' => 174),
    array('projectId' => 2, 'task' => 1, 'totalHoursWorked' => 205),
    array('projectId' => 2, 'task' => 2, 'totalHoursWorked' => 153),
    array('projectId' => 2, 'task' => 3, 'totalHoursWorked' => 634),
    array('projectId' => 2, 'task' => 4, 'totalHoursWorked' => 815),
);

foreach($array1 as &$values) {
    foreach($array2 as $values2) {
        if($values['projectId'] == $values2['projectId'] && $values['task'] == $values2['task']) {
            $values['totalHoursWorked'] = $values2['totalHoursWorked'];
        }
    }
}

echo '<pre>';
print_r($array1);

应该产生类似的东西:

Array
(
    [0] => Array
        (
            [projectId] => 1
            [task] => 1
            [hoursEstimated] => 345
            [totalHoursWorked] => 145
        )

    [1] => Array
        (
            [projectId] => 1
            [task] => 4
            [hoursEstimated] => 274
            [totalHoursWorked] => 174
        )

    [2] => Array
        (
            [projectId] => 2
            [task] => 1
            [hoursEstimated] => 432
            [totalHoursWorked] => 205
        )

    [3] => Array
        (
            [projectId] => 2
            [task] => 2
            [hoursEstimated] => 347
            [totalHoursWorked] => 153
        )

    [4] => Array
        (
            [projectId] => 2
            [task] => 4
            [hoursEstimated] => 815
            [totalHoursWorked] => 815
        )

)

答案 2 :(得分:1)

您可以尝试以下方式:

foreach($array1 as &$arr1){    
    foreach($array2 as $arr2){
         if($arr1['projectId'] === arr2['projectId'] 
         && $arr1['task'] === $arr2['task']){
              $arr1['totalHoursWorked'] = $arr2['totalHoursWorked'];
         }
    }
}
//or
array_walk($array1,function($arr1){
    foreach($array2 as $arr2){
         if($arr1['projectId'] === arr2['projectId']
         && $arr1['task'] === $arr2['task']){
              $arr1['totalHoursWorked'] = $arr2['totalHoursWorked'];
         }
    }
});
print_r($array1);