【问题标题】:Sum values in multi dimensional array多维数组中的总和值
【发布时间】:2018-04-16 21:03:55
【问题描述】:

我正在尝试使用此数组显示每个广告系列编号自开始以来的总安装量。

    Array
(
    [27] => Array
        (
            [0] => Array
                (
                    [date] => 2018-04-09
                    [hour] => 7
                    [campaign] => 27
                    [installs] => 2
                    [trials] => 0
                )

            [1] => Array
                (
                    [date] => 2018-04-09
                    [hour] => 3
                    [campaign] => 39
                    [installs] => 1
                    [trials] => 0
                )

            [2] => Array
                (
                    [date] => 2018-04-09
                    [hour] => 5
                    [campaign] => 39
                    [installs] => 1
                    [trials] => 0
                )

            [3] => Array
                (
                    [date] => 2018-04-09
                    [hour] => 6
                    [campaign] => 39
                    [installs] => 1
                    [trials] => 0
                )

            [4] => Array
                (
                    [date] => 2018-04-09
                    [hour] => 8
                    [campaign] => 39
                    [installs] => 2
                    [trials] => 0
                )
        )

    [53] => Array
        (
            [0] => Array
                (
                    [date] => 2018-04-10
                    [hour] => 3
                    [campaign] => 53
                    [installs] => 1
                    [trials] => 0
                )

            [1] => Array
                (
                    [date] => 2018-04-10
                    [hour] => 9
                    [campaign] => 53
                    [installs] => 1
                    [trials] => 0
                )

            [2] => Array
                (
                    [date] => 2018-04-10
                    [hour] => 5
                    [campaign] => 55
                    [installs] => 1
                    [trials] => 0
                )

            [3] => Array
                (
                    [date] => 2018-04-10
                    [hour] => 12
                    [campaign] => 55
                    [installs] => 1
                    [trials] => 0
                )

        )

    [61] => Array
        (
            [0] => Array
                (
                    [date] => 2018-04-15
                    [hour] => 0
                    [campaign] => 61
                    [installs] => 27
                    [trials] => 1
                )

            [1] => Array
                (
                    [date] => 2018-04-15
                    [hour] => 1
                    [campaign] => 61
                    [installs] => 18
                    [trials] => 0
                )
                [2] => Array
                (
                    [date] => 2018-04-15
                    [hour] => 1
                    [campaign] => 27
                    [installs] => 10
                    [trials] => 0
                )

我的数组如上所示。您可以看到一些活动编号在不同日期重复。我的结果应该是这样的:

活动 27:12
战役 39:5
战役 53:2
战役 55:2
战役 61:45

到目前为止,我得到了这个,它似乎并没有打印所有数据。

    $newarray = array();
$last = count($res) - 1;
foreach ($res as $i => $new){
foreach ($new as $x => $row){
    $isFirst = ($i == 0);
    $isLast = ($i == $last);
    $grabbedvalue = $row['campaign'].",".$row['installs'];
        array_push($newarray,$grabbedvalue);

}
}

print_r($newarray);

希望有人可以帮助我解决这个问题。谢谢!

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 那么你的尝试在哪里?我敢肯定有人愿意帮助,但不只是为你做。
  • 刚刚添加了我目前所拥有的@Mehdi

标签: php arrays json


【解决方案1】:

只需循环遍历数组并计数:

$data = [

    [
        'campaign' => 1,
        'installs' => 20, 
    ],
    [
        'campaign' => 1,
        'installs' => 5, 
    ],
    [
        'campaign' => 2,
        'installs' => 1, 
    ],
    [
        'campaign' => 2,
        'installs' => 10, 
    ],
    [
        'campaign' => 3,
        'installs' => 9, 
    ],

];

$count=array();
// Loop through the campaigns
foreach($data as $camp){
    // Check if we initiated the counting before
    if(isset($count[$camp['campaign']])){
        // Add installs count to previous value
        $count[$camp['campaign']] += $camp['installs'];
    } else {
        // Initiate the counting
        $count[$camp['campaign']] = $camp['installs'];
    }
}

var_dump($count);

这将给出:

array (size=3)
  1 => int 25
  2 => int 11
  3 => int 9

【讨论】:

  • @Joas 你为什么这么认为。
  • 在问这个问题之前,他自己并没有尝试这样做。当我试图解释他如何解决这个问题时,很明显他不了解数组的基础知识。我担心他会直接复制代码并使用它而不看第二遍来试图理解它的作用。
  • 不要误会我的意思,您的答案是正确的,并且您指定的示例有据可查,尽管我担心 OP 不会查看文档而只是复制您的代码。我个人不喜欢这个想法,所以我更喜欢链接一个网站,在那里 OP 可以了解数组并学习如何自己做这件事,因为他似乎无法理解它们。我想这只是我个人的看法。
  • @Joas 我明白你的想法,但 IMO 人员可以通过检查代码来学习。如果内容不在答案中,则不鼓励链接到场外资源。但无论如何,阅读它们的人都可以得到答案(你的和我的)。
  • @James 我知道很多人(尤其是新成员)只是希望我们为他们编写代码。 “你在哪里画线”我实际上没有规则,但是,如果我看到 OP 尝试了一些代码(不仅仅是随机的无意义代码)并且他妨碍了得到答案后,如果需要,我会使用 cmets 和文档链接发布解决方案。但我实际上认为在这种情况下不幸的是我错了,OP没有回复我的答案,也没有回复另一个。
【解决方案2】:

你应该在 for 循环中创建一个 for 循环来解决这个问题。

我可以尝试尽可能清楚地解释这些步骤:

  • 创建一个新数组 ($totalInstalls)
  • 循环遍历您指定的数组
  • 循环遍历您指定的数组中的每个元素(for 循环内的 for 循环)
  • 检查当前元素的活动索引是否已存在于 $totalInstalls 中
  • 如果未将其设置为安装
  • 如果确实存在,则将其加一

【讨论】:

  • 刚刚保存了我的编辑,我已将它们各自添加到一个数组中。虽然这只存储了 27 数组中的所有值。
  • @JackEllis 尝试在 $totalInstalls 数组中使用campaing ID 作为索引和总安装次数
  • 如何指定使用哪个作为索引?
  • 你应该阅读PHP的数组手册:php.net/manual/en/language.types.array.php
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多