php foreach 二维数组的问题
PHPz
PHPz 2017-04-11 08:57:41
[PHP讨论组]

数据库中查询出的结果是二维数组,然后foreach后出现以下结果
foreach:

foreach ($users as $k=>$v){
        var_dump($v);
}

结果:

  array(12) {["id"]=> string(1) "7" ["name"]=> string(9) "小红" ["province"]=> string(6) "四川"   ["activation"]=> int(5) ["money"]=> string(5) "25.00" ["count"]=> int(1000) ["total"]=> string(1) "4" ["coltd"]=> string(1) "2" ["station"]=> string(1) "0" ["totalMoney"]=> string(8) "13001.01" } 
  array(12) { ["id"]=> string(1) "9" ["name"]=> string(9) "蒋磊"  ["province"]=> string(6) "浙江"   ["activation"]=> int(10) ["money"]=> string(5) "50.00" ["count"]=> int(1000)["total"]=> string(1) "3" ["coltd"]=> string(1) "2" ["station"]=> string(1) "0" ["totalMoney"]=> string(4) "0.51" } 
  array(12) { ["id"]=> string(1) "3" ["name"]=> string(9) "魏天" ["province"]=> string(6) "天津"   ["activation"]=> int(0) ["money"]=> string(4) "0.00" ["count"]=> int(0) ["total"]=> string(1) "4" ["coltd"]=> string(1) "2" ["station"]=> string(1) "2" ["totalMoney"]=> string(4) "0.44" } 
  array(12) { ["id"]=> string(1) "1"  ["name"]=> string(9) "张小明"  ["province"]=> string(6) "广东"   ["activation"]=> int(1) ["money"]=> string(4) "5.00" ["count"]=> int(1000) ["total"]=> string(1) "1" ["coltd"]=> string(1) "2" ["station"]=> string(1) "0" ["totalMoney"]=> string(4) "0.04" } 
  array(12) { ["id"]=> string(2) "12" ["name"]=> string(9) "张小明"  ["province"]=> string(6) "湖北"   ["activation"]=> int(1) ["money"]=> string(4) "5.00" ["count"]=> int(1000) ["total"]=> string(1) "1" ["coltd"]=> string(1) "0" ["station"]=> string(1) "0" ["totalMoney"]=> string(4) "0.04" } 
  array(12) { ["id"]=> string(2) "26" ["name"]=> string(9) "张小明" ["province"]=> string(6) "北京"   ["activation"]=> int(1) ["money"]=> string(4) "5.00" ["count"]=> int(1000) ["total"]=> string(1) "1" ["coltd"]=> string(1) "0" ["station"]=> string(1) "7" ["totalMoney"]=> string(4) "0.04" } }

想得到的结果是:将名字【name】相同的人的对应的值相加,但是总的人数不变【数组的元素个数不变】。[例:张小明的数据, 将三个元素中的["activation"],["money"],["count"],["total"],["totalMoney"]的值相加]
想要得到以下的结果:

  array(12) { ["id"]=> string(1) "7" ["name"]=> string(9) "小红" ["province"]=> string(6) "四川"   ["activation"]=> int(5) ["money"]=> string(5) "25.00" ["count"]=> int(1000) ["total"]=> string(1) "4" ["coltd"]=> string(1) "2" ["station"]=> string(1) "0" ["totalMoney"]=> string(8) "13001.01" } 
  array(12) { ["id"]=> string(1) "9" ["name"]=> string(9) "蒋磊"  ["province"]=> string(6) "浙江"   ["activation"]=> int(10) ["money"]=> string(5) "50.00" ["count"]=> int(1000)["total"]=> string(1) "3" ["coltd"]=> string(1) "2" ["station"]=> string(1) "0" ["totalMoney"]=> string(4) "0.51" } 
  array(12) { ["id"]=> string(1) "3" ["name"]=> string(9) "魏天" ["province"]=> string(6) "天津"   ["activation"]=> int(0) ["money"]=> string(4) "0.00" ["count"]=> int(0) ["total"]=> string(1) "4" ["coltd"]=> string(1) "2" ["station"]=> string(1) "2" ["totalMoney"]=> string(4) "0.44" } 
  array(12) { ["id"]=> string(1) "1"  ["name"]=> string(9) "张小明"  ["province"]=> string(6) "广东"   ["activation"]=> int(3) ["money"]=> string(4) "15.00" ["count"]=> int(3000) ["total"]=> string(1) "3" ["coltd"]=> string(1) "2" ["station"]=> string(1) "0" ["totalMoney"]=> string(4) "0.12" } 
  array(12) { ["id"]=> string(2) "12" ["name"]=> string(9) "张小明"  ["province"]=> string(6) "湖北"   ["activation"]=> int(3) ["money"]=> string(4) "15.00" ["count"]=> int(3000) ["total"]=> string(1) "3" ["coltd"]=> string(1) "0" ["station"]=> string(1) "0" ["totalMoney"]=> string(4) "0.12" } 
  array(12) { ["id"]=> string(2) "26" ["name"]=> string(9) "张小明" ["province"]=> string(6) "北京"   ["activation"]=> int(3) ["money"]=> string(4) "15.00" ["count"]=> int(3000) ["total"]=> string(1) "3"  ["coltd"]=> string(1) "0" ["station"]=> string(1) "7" ["totalMoney"]=> string(4) "0.12" } }
PHPz
PHPz

学习是最好的投资!

全部回复(3)
黄舟
//数组自己补吧,不想写那么多了
$arr=[['id'=>7,'name'=>'php','activation'=>1,'money'=>10,'province'=>'北京'],
       ['id'=>1,'name'=>'js','activation'=>12,'money'=>80,'province'=>'广东'],
       ['id'=>10,'name'=>'js','activation'=>2,'money'=>20,'province'=>'天津']
      ];

$res=[];
foreach($arr as $k=>$v){
    if(isset($res[$v['name']])){
        // 自己补剩下字段
        $res[$v['name']]['activation']+=$v['activation'];
        $res[$v['name']]['money']+=$v['money'];
    } else {
       $res[$v['name']] = $v;
    }
}
foreach($res as $k=>$v){
     foreach($arr as $key=>&$value){
        if($v['name']==$value['name']){
            // 自己补剩下字段
            $value['activation']=$v['activation'];
            $value['money']=$v['money'];
        }
     }
}
echo '<pre>';print_r($arr);
Array
(
    [0] => Array
        (
            [id] => 7
            [name] => php
            [activation] => 1
            [money] => 10
            [province] => 北京
        )

    [1] => Array
        (
            [id] => 1
            [name] => js
            [activation] => 14
            [money] => 100
            [province] => 广东
        )

    [2] => Array
        (
            [id] => 10
            [name] => js
            [activation] => 14
            [money] => 100
            [province] => 天津
        )

)
高洛峰
sum(activation),sum(money),sum(count),sum(total),sum(totalMoney).....group by name
黄舟

能做,有点麻烦。

但更好的办法是:
通过数据库查询的时候直接计算出所需要的值。
像楼上说的:用group by name
出来后,当然,相同名字的只会出现一行,如果你真的需要多行的话,你可以另外再查询一次:
select id,name from table;
然后循环把两次的结果结合起来处理。

然后:
我还是不明白,什么时候需要把相同名字的求和,又要显示多条数据?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号