【问题标题】:Add data to multidimensial array将数据添加到多维数组
【发布时间】:2014-08-25 22:26:48
【问题描述】:

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

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..

【问题讨论】:

  • 能否请您提供声明前两个数组的实际代码
  • 您的数组在 PHP 中无效。
  • 哦,是的,我知道。它是一个虚拟数据库。我不在我的工作计算机上,所以我无权访问数据库。但是我的查询会给出这个输出。因此,两个数组中的 projectId 和任务必须相同,以便可以将其附加到数组中。我们有很多项目,我们为它们使用相同的任务。

标签: php arrays database merge intersect


【解决方案1】:
foreach($data1 as $key => &$value){
    foreach($data2 as $k => $v){
        if($v['projectId'] == $value['projectId'] && $v['task'] == $value['task']){
            $value['totalHoursWorked'] = $v['totalHoursWorked'];
        }
    }
}

【讨论】:

    【解决方案2】:

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

    $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
            )
    
    )
    

    【讨论】:

      【解决方案3】:

      你可以试试这些方法:

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-22
        • 1970-01-01
        • 2013-02-28
        • 2014-08-08
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多