2016-06-17 49 views
1

我想将数组转换为数组。如果父ID相同,则合并多维数组然后合并子数据

标准是,

如果projectId同一然后存储下项目的数组,它包含作为projectId关键项目相同的id数据。

Array 
(
    [0] => Array 
     (
      [PMST] => Array 
       (
        [id] => 4 
        [project_id] => 25 
        [task_name] => Final task 3 
        [start_date] => 2016-06-21 00:00:00 
        [end_date] => 2016-06-29 00:00:00 
       ) 

      [PMSP] => Array 
       (
        [id] => 25 
        [project_name] => Project 3 
        [start_date] => 2016-06-01 00:00:00 
        [end_date] => 2016-06-04 00:00:00 
       ) 

     ) 

    [1] => Array 
     (
      [PMST] => Array 
       (
        [id] => 9 
        [project_id] => 28 
        [task_name] => Task Test 333 edit 
        [start_date] => 2016-06-19 00:00:00 
        [end_date] => 2016-06-29 00:00:00 
       ) 

      [PMSP] => Array 
       (
        [id] => 28 
        [project_name] => Project Employee Test 
        [start_date] => 2016-06-10 00:00:00 
        [end_date] => 2016-06-30 00:00:00 
       ) 

     ) 

    [2] => Array 
     (
      [PMST] => Array 
       (
        [id] => 1 
        [project_id] => 28 
        [task_name] => Task 1 
        [start_date] => 2016-06-01 00:00:00 
        [end_date] => 2016-06-04 00:00:00 
       ) 

      [PMSP] => Array 
       (
        [id] => 28 
        [project_name] => Project Employee Test 
        [start_date] => 2016-06-10 00:00:00 
        [end_date] => 2016-06-30 00:00:00 
       ) 
     ) 
) 

欲望输出

Array 
(
    [25] => Array 
     (
     [PMSP] => Array 
       (
        [id] => 25 
        [company_id] => 1114701 
        [project_name] => Project 3 
        [start_date] => 2016-06-01 00:00:00 
        [end_date] => 2016-06-04 00:00:00 
       ) 
     [taskdetails] => Array 
      (
       [0] => Array(
        [PMST] => Array 
         (
          [id] => 4 
          [project_id] => 25 
          [company_id] => 1114701 
          [task_name] => Final task 3 
          [start_date] => 2016-06-21 00:00:00 
          [end_date] => 2016-06-29 00:00:00 
        ) 
       )   
      ) 
     ) 

    [28] => Array 
     (
      [PMSP] => Array 
       (
        [id] => 28 
        [company_id] => 1114701 
        [project_name] => Project Employee Test 
        [start_date] => 2016-06-10 00:00:00 
        [end_date] => 2016-06-30 00:00:00 
       ) 
      [taskdetails] => Array 
      (
       [0] => Array 
        (
       [PMST] => Array 
        (
         [id] => 9 
         [project_id] => 28 
         [company_id] => 1114701 
         [task_name] => Task Test 333 edit 
         [start_date] => 2016-06-19 00:00:00 
         [end_date] => 2016-06-29 00:00:00 
        ) 
       ) 
       [1] => Array(
       [PMST] => Array 
        (
         [id] => 1 
         [project_id] => 28 
         [company_id] => 1114701 
         [task_name] => Task 1 
         [start_date] => 2016-06-01 00:00:00 
         [end_date] => 2016-06-04 00:00:00 
        ) 
       ) 
      ) 
     ) 
) 

回答

2

遍历使用foreach,加入PMST数据输出数组作为你走你的输入数组。看起来可以安全地假设在同一个项目中两个任务的数据将是相同的。

$output = []; 
foreach ($input as $task) { 
    if (!isset($output[$task["PMSP"]["id"]])) { 
     $output[$task["PMSP"]["id"]] = ["PMSP" => $task["PMSP"], "taskdetails" => []]; 
    } 
    $output[$task["PMSP"]["id"]]["taskdetails"][] = $task["PMST"]; 
} 
+0

由于一吨。它的工作完美。 :) +1并接受。 – RJParikh

2

参见下面的例子

Example

$data = []; 

foreach ($a as $b) { 
    $key = $b["PMSP"]["id"]; 
    if (!isset($data[$key])) { 
     $data[$key] = ["PMSP" => $b["PMSP"], "taskdetails" => []]; 
    } 
    $data[$key]["taskdetails"][] = $b["PMST"]; 
} 
echo "<pre>"; 
print_r($data);exit(); 

你的最新数据 Example 2

+0

非常感谢。它的工作完美。 :) +1。 – RJParikh