[英]PHP - Loop and merge array based on same Key
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
)
)
再次循环数组
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
)
编辑
我实际上想要实现的是以下面的表格形式显示“现场”,“离岸时间”和“总工时”
它确实正确显示了首次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
理想的输出并不是真正可以实现的,但是您可以使用以下命令:
$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
)
// ...
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.