2015-09-08 2 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 - Петля и объединить массив на основе той же Key

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']; 

       } 
      } 
     } 
    } 
} 

Выходы

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

     )  
) 

на основе ключевых month_year как объединить два массива, низкий выход

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

EDIT

То, что я на самом деле пытается добиться, чтобы показать на месте, Offshore и Всего часов в виде таблицы, как показано ниже

Он отображает часы правильно для первого апрель-2015, но не для июня-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] => Offshore [ACTUAL_HOURS] => 176 [MONTH_YEAR] => APR -2015 ) [1] => Массив ( [SITE_STATUS] => на месте [ACTUAL_HOURS] => 180 [MONTH_YEAR] => апрель-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] => апрель-2015 ) [1] => Массив ( [SITE_STATUS] => на месте [ACTUAL_HOURS] => 180 [MONTH_YEAR] => апрель-2015 ) ) ) – Slimshadddyyy

Смежные вопросы