2015-09-08 66 views
0
foreach ($total_month_hours_result as $key => $data){ print_r($data); } //outputs below array 

Array 
(
    [0] => Array 
     (
      [SITE_STATUS] => Offshore 
      [ACTUAL_HOURS] => 176 
      [MONTH_YEAR] => APR-2015 
     ) 

    [1] => Array 
     (
      [SITE_STATUS] => Onsite 
      [ACTUAL_HOURS] => 180 
      [MONTH_YEAR] => APR-2015 
     ) 

) 

再次循环数组PHP - 基于环路和合并阵列相同的密钥

foreach ($data as $key => $val){print_r($val);} // outputs below array 


Array 
(
    [SITE_STATUS] => Offshore 
    [ACTUAL_HOURS] => 176 
    [MONTH_YEAR] => APR-2015 
) 

Array 
(
    [SITE_STATUS] => Onsite 
    [ACTUAL_HOURS] => 180 
    [MONTH_YEAR] => APR-2015 
) 

尝试下面的代码

$hours_array = Array(); 
foreach ($project_months as $month) { 

    foreach ($total_month_hours_result as $key => $data){ 

     if (!empty($data)){ 

      foreach ($data as $key => $val){ 

       if ($val['MONTH_YEAR'] == $month){ 

        $hours_array[$val['MONTH_YEAR']][$month]['SITE_STATUS'] = $val['SITE_STATUS']; 
        $hours_array[$val['MONTH_YEAR']][$month]['OFFSHORE_HOURS'] = $val['OFFSHORE_HOURS']; 
        $hours_array[$val['MONTH_YEAR']][$month]['ONSITE_HOURS'] = $val['ONSITE_HOURS']; 
        $hours_array[$val['MONTH_YEAR']][$month]['TOTAL_HOURS'] = $val['ONSITE_HOURS'] + $val['OFFSHORE_HOURS']; 

       } 
      } 
     } 
    } 
} 

的基础上输出键month_year

Array 
(
    [APR-2015] => Array 
     (
      [APR-2015] => Array 
       (
        [SITE_STATUS] => Onsite 
        [TOTAL_HOURS] => 356 
        [ONSITE_HOURS] => 180 
        [OFFSHORE_HOURS] => 176 
       ) 

     )  
) 

如何我将两个数组合并成为低输出

Array 
(
    [SITE_STATUS] => Offshore 
    [ACTUAL_HOURS] => 176 
    [SITE_STATUS] => Onsite 
    [ACTUAL_HOURS] => 180 
    [MONTH_YEAR] => APR-2015 
) 

编辑

什么,我其实是想实现的是显示在表格的形式现场,离岸和总学时像下面

它并正确显示时间为第APR-2015而不是JUN-15

Name of Engineer Site MAR-15 Site APR-15 Site  JUN-15 
User 1       Onsite 120 Offshore 170    
User 2       Offshore 140 Offshore 180 

Total Hours        260           350 
Total Onsite        120           0 
Total Offshore        140           350 

SQL:

SELECT decode(pr.siteid, 397, 'Onsite', 398, 'Offshore') AS 
site_status, 
    SUM(tm.user_hours) AS 
actual_hours, 
    tm.month_year 
FROM project_resource pr 
INNER JOIN monthly_table tm ON tm.resource_id = pr.employeeid 
AND tm.project_id = pr.projectid 
INNER JOIN resource_table rd ON rd.employeeid = pr.employeeid 
INNER JOIN expband_view exbvw ON exbvw.employeeid = pr.employeeid 
INNER JOIN mastercode_table mc ON mc.codeid = rd.primaryskill 
WHERE tm.project_id = 741 
AND tm.month_year = 'APR-2015' --months will be passed dynamically 
GROUP BY pr.siteid,tm.month_year 
ORDER BY SITE_STATUS DESC 

SQL结果

SITE_STATUS ACTUAL_HOURS MONTH_YEAR 
Onsite  307   APR-2015 
Offshore  352   APR-2015 
+2

这样的结果因为你不能重复数组键,所以不能实现数组键。 'ACTUAL_HOURS')。 –

+0

你不能。重复的数组键会发生冲突,至多你会得到第二组数据。 –

+0

@JasonMcCreary SNAP!伟大的思想,yatta yatta yatta –

回答

0

你理想的输出是不是真的可以实现的,但你可以这样做:

$results = array(); 

foreach ($total_month_hours_result as $rows) { 
    foreach ($rows as $data) { 
     $results[$data['MONTH_YEAR']][$data['SITE_STATUS']] = $data['ACTUAL_HOURS']; 
    } 
} 

要产生这样的:

Array 
(
    [APR-15] => Array 
    (
     [Offshore] => 176, 
     [Onsite] => 180 
    ) 
    // ... 
) 
+0

$数据=阵列 ( [0] =>数组 ( [SITE_STATUS] =>离岸 [ACTUAL_HOURS] => 176 [MONTH_YEAR] => APR -2015 ) [1] =>数组 ( [SITE_STATUS] =>现场 [ACTUAL_HOURS] => 180 [MONTH_YEAR] => APR-2015 ) )。所以我们再次需要循环数据 – Slimshadddyyy

+0

那么'$ total_month_hours_result'是什么?问题中的示例显示'$ data'将是'Array([SITE_STATUS] => Onsite,[ACTUAL_HOURS] => 180,[MONTH_YEAR] => APR-2015)' –

+0

print_r($ total_month_hours_result); 阵列 ( [0] =>数组 ( ) [1] =>数组 ( [0] =>数组 ( [SITE_STATUS] =>离岸 [ACTUAL_HOURS] => 176 [MONTH_YEAR] => APR-2015 ) [1] =>数组 ( [SITE_STATUS] =>现场 [ACTUAL_HOURS] => 180 [MONTH_YEAR] => APR-2015 ) ) ) – Slimshadddyyy