首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于相同键的PHP循环和合并数组

基于相同键的PHP循环和合并数组
EN

Stack Overflow用户
提问于 2015-09-08 12:43:54
回答 1查看 108关注 0票数 0
代码语言:javascript
复制
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
        )

)

再次循环数组

代码语言:javascript
复制
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
)

试过以下代码

代码语言:javascript
复制
$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'];

                }
            }
        }
    }
}

输出

代码语言:javascript
复制
Array
(
    [APR-2015] => Array
        (
            [APR-2015] => Array
                (
                    [SITE_STATUS] => Onsite
                    [TOTAL_HOURS] => 356
                    [ONSITE_HOURS] => 180
                    [OFFSHORE_HOURS] => 176
                )

        )       
)

基于键month_year,如何将两个数组合并成下面的输出

代码语言:javascript
复制
Array
(
    [SITE_STATUS] => Offshore
    [ACTUAL_HOURS] => 176
    [SITE_STATUS] => Onsite
    [ACTUAL_HOURS] => 180
    [MONTH_YEAR] => APR-2015
)

编辑

我真正想达到的目标是在现场、离岸和总小时数表中显示如下所示

它确实正确地显示了第一次APR-2015的小时数,但没有显示6月15日的小时数。

代码语言:javascript
复制
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:

代码语言:javascript
复制
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结果

代码语言:javascript
复制
SITE_STATUS  ACTUAL_HOURS   MONTH_YEAR
Onsite        307           APR-2015
Offshore      352           APR-2015
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 12:59:41

您的理想输出并不是真正可以实现的,但是您可以使用以下方法:

代码语言:javascript
复制
$results = array();

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

若要制作这一文件:

代码语言:javascript
复制
Array
(
    [APR-15] => Array
    (
        [Offshore] => 176,
        [Onsite]   => 180
    )
    // ...
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32458204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档