首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:键相同的子数组的所有值之和

问PHP:键相同的子数组的所有值之和
EN

Stack Overflow用户
提问于 2018-12-06 18:53:30
回答 3查看 87关注 0票数 1

注释:这不仅仅是对电话时间的求和,电话时间需要通过函数单独计算。

我目前有以下代码

代码语言:javascript
复制
$i = array(1,2,3,4,5,6,7,8,9,10,11,12);

$j = array();

foreach ($i as $item) {
    $month_query_phonetime = $conn->query("SELECT phone_time FROM bigscreen_daily_data WHERE MONTH(work_date) = {$item} AND YEAR(work_date) = YEAR(CURDATE()) AND user_id = 28");

    while ($dataitem = $month_query_phonetime->fetch_object()) {
        $j[][$item] = point_for_phone_time($dataitem->phone_time);
    }
}

print_r($j);

这给了我如下的结果

代码语言:javascript
复制
    Array
    (
        [0] => Array
            (
                [1] => 0
            )

        [1] => Array
            (
                [1] => 10
            )

        [2] => Array
            (
                [2] => 48
            )

        [3] => Array
            (
                [2] => 24
            )

        [4] => Array
            (
                [3] => 48
            )
        [4] => Array
            (
                [3] => 48
            )

    )

我试图将所有[1] => value、[2]=> value等的和作为一个变量,并将其传递给$j[][$item]中的工业项目,以便用于进一步的处理。

我试过

代码语言:javascript
复制
while ($dataitem = $month_query_phonetime->fetch_object()) {
    $m = $m + point_for_phone_time($dataitem->phone_time);
}

$j[][$item] = $m;

它给了我如下的价值

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [1] => {value1}
        )

    [1] => Array
        (
            [2] => {value1+value2}
        )
)

为了得到想要的结果,这是正确的格式来处理这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-08 14:37:40

最后,将查询附加到我希望它出现的循环中,现在它将显示预期的结果。

代码语言:javascript
复制
foreach ($data as $obj)
{

    $month_query_phonetime = $conn->query("SELECT phone_time FROM bigscreen_daily_data WHERE MONTH(work_date) = {$obj->mon} AND YEAR(work_date) = YEAR(CURDATE()) AND user_id = {$userid} ");

    $m = 0;

    while ($dataitem = $month_query_phonetime->fetch_object()) {
        $m = $m + point_for_phone_time($dataitem->phone_time);
    }

    $obj->prog_point = $obj->prog_point + $m;
}
票数 0
EN

Stack Overflow用户

发布于 2018-12-06 18:58:29

如果我正确地理解了并且您试图为每个phone_time求和每个user_id,为什么不让数据库为您做繁重的工作,并使用聚合查询:

代码语言:javascript
复制
SELECT   user_id, SUM(phone_time) AS sum_phone_time
FROM     bigscreen_daily_data
GROUP BY user_id

它的执行速度可能也比遍历user_id、查询每个phone_time并自己对它们进行求和更快。

票数 3
EN

Stack Overflow用户

发布于 2018-12-06 19:23:16

让MySQL按月分组,并将数据集限制在今年:

代码语言:javascript
复制
SELECT   MONTH(work_date) AS m,SUM(phone_time) AS sum_phone_time
FROM     bigscreen_daily_data
WHERE    user_id = 28 AND work_date >= MAKEDATE(year(now()),1);
GROUP BY m
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53657923

复制
相关文章

相似问题

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