2018-05-31 10:41

# 如何计算PHP中相同数组值的总和

I have an array like this

``````\$estimate[0]=>
'gear' =>'MMG'
'total' =>  315
'efforts' => 9
'afh' => 18

\$estimate[1]=>
'gear' =>'MMG'
'total' =>  400
'efforts' => 2
'afh' => 6

\$estimate[2]=>
'gear' =>'BOO'
'total' =>  200
'efforts' => 20
'afh' => 16

\$estimate[3]=>
'gear' =>'BOB'
'total' =>  250
'efforts' => 20
'afh' => 16
``````

I want to calculate the sum of total, efforts and afh in which gear is same and it will be stored in the another array. Following my coding is working when the array (estimate) size is less than 5.

``````\$calculate = array();
for(\$et=0;\$et<count(\$estimate);):
if(\$et==0):
\$calculate[\$et]['gear'] = \$estimate[\$et]['gear'];
\$calculate[\$et]['total'] = \$estimate[\$et]['total'];
\$calculate[\$et]['efforts'] = \$estimate[\$et]['efforts'];
\$calculate[\$et]['afh'] = \$estimate[\$et]['afh'];
goto loopend;
endif;
for(\$cet=0;\$cet<count(\$calculate);\$cet++):
if(\$estimate[\$et]['gear'] == \$calculate[\$cet]['gear']):
\$calculate[\$cet]['total'] = \$calculate[\$cet]['total'] + \$estimate[\$et]['total'];
\$calculate[\$cet]['efforts'] = \$calculate[\$cet]['efforts'] + \$estimate[\$et]['efforts'];
\$calculate[\$cet]['afh']    = \$calculate[\$cet]['afh'] + \$estimate[\$et]['afh'];
goto loopend;
endif;
endfor;
\$calculate[\$et]['gear'] = \$estimate[\$et]['gear'];
\$calculate[\$et]['total'] = \$estimate[\$et]['total'];
\$calculate[\$et]['efforts'] = \$estimate[\$et]['efforts'];
\$calculate[\$et]['afh'] = \$estimate[\$et]['afh'];
goto loopend;
loopend:\$et++;
endfor;
``````

The coding is not working more than many gears. Sometimes it works. I can't find the issues. Please help me to solve the issues.

#### 图片转代码服务由CSDN问答提供 功能建议

``` ``` \$ estimate [0  ] =＆gt;
'gear'=＆gt;'MMG'
'total'=＆gt;  315
'努力'=＆gt;  9
'afh'=＆gt;  18

\$ estimate [1] =＆gt;
'gear'=＆gt;'MMG'
'total'=＆gt;  400
'努力'=＆gt;  2
'afh'=＆gt;  6

\$ estimate [2] =＆gt;
'gear'=＆gt;'BOO'
'total'=＆gt;  200
'努力'=＆gt;  20
'afh'=＆gt;  16

\$ estimate [3] =＆gt;
'gear'=＆gt;'BOB'
'total'=＆gt;  250
'努力'=＆gt;  20
'afh'=＆gt;  16

我想计算总计，努力和 afh 其中齿轮相同，它将存储在另一个数组中。 当我的编码在数组（估计）大小小于5时工作。

\$ calculate = array（）;
for（\$ et = 0; \$ et＆lt; count（\$ estimate）;）：
if（\$ et == 0）：
\$ calculate [\$ et] ['gear'] = \$ estimate [\$ et] [  'gear'];
\$ calculate [\$ et] ['total'] = \$ estimate [\$ et] ['total'];
\$ calculate [\$ et] ['effort'] = \$ estimate [\$ et  ] ['努力'];
\$计算[\$ et] ['afh'] = \$ estimate [\$ et] ['afh'];
goto loopend;
endif;
for（\$ cet = 0; \$ cet＆lt; count（\$ calculate）; \$ cet ++）：
if（\$ estimate [\$ et] ['gear'] == \$ calculate [\$  cet] ['gear']）：
\$ calculate [\$ cet] ['total'] = \$ calculate [\$ cet] ['total'] + \$ estimate [\$ et] ['total'];
\$ 计算[\$ cet] ['努力'] = \$计算[\$ cet] ['努力'] + \$估计[\$ et] ['努力'];
\$计算[\$ cet] ['afh'] = \$ 计算[\$ cet] ['afh'] + \$ estimate [\$ et] ['afh'];

endif;
endfor;
\$ calculate [\$ et] ['gear'] = \$ estimate [\$ et] ['gear'];
\$ calculate [\$ et] ['total'] = \$ estimate [  \$ et] ['total'];
\$ calculate [\$ et] ['effort'] = \$ estimate [\$ et] ['effort'];
\$ calculate [\$ et] ['afh'] = \$ 估计[\$等] [ 'AFH'];
goto loopend;
loopend：\$ et ++;
endfor;

编码不是比许多齿轮工作的。 有时它有效。 我找不到问题。 请帮我解决问题。
``````
` `
``` 点赞 写回答 关注问题 收藏 分享 邀请回答 ```
``` 3条回答 默认 最新 drmcm84800 2018-05-31 12:12 已采纳 You might use array_reduce: \$result = array_reduce(\$estimate, function(\$carry, \$item) { if (!isset(\$carry[\$item["gear"]])) { \$carry[\$item["gear"]] = \$item; return \$carry; } \$carry[\$item["gear"]]["total"] += \$item["total"]; \$carry[\$item["gear"]]["efforts"] += \$item["efforts"]; \$carry[\$item["gear"]]["afh"] += \$item["afh"]; return \$carry; }); Demo 点赞 评论 分享 dswwuo1223 2018-05-31 10:56 <?php \$new_arr = array(); \$estimate[0] =array( 'gear' =>'MMG', 'total' => 315, 'efforts' => 9, 'afh' => 18 ); \$estimate[1]=array( 'gear' =>'MMG', 'total' => 400, 'efforts' => 2, 'afh' => 6, ); \$estimate[2]=array( 'gear' =>'BOO', 'total' => 200, 'efforts' => 20, 'afh' => 16, ); \$estimate[3]=array( 'gear' =>'BOB', 'total' => 250, 'efforts' => 20, 'afh' => 16, ); foreach (\$estimate as \$key => \$value) { \$new_arr[\$value['gear']] = array( 'total' => (isset(\$new_arr[\$value['gear']]['total']) ? (\$new_arr[\$value['gear']]['total'] + \$value['total']) : \$value['total'] ), 'efforts' => (isset(\$new_arr[\$value['gear']]['efforts']) ? (\$new_arr[\$value['gear']]['efforts'] + \$value['efforts']) : \$value['efforts'] ), 'afh' => (isset(\$new_arr[\$value['gear']]['afh']) ? (\$new_arr[\$value['gear']]['afh'] + \$value['afh']) : \$value['afh'] ) ); } echo "<pre>";print_r(\$new_arr); 点赞 评论 分享 dongqian3198 2018-05-31 11:00 As per my comment use foreach loop when your array length is not define Here is your desired code <?php \$estimate = array( "0" => array ( "gear" => 35, "total" => 30, "efforts" => 39, "afh" => 39, ), "1" => array ( "gear" => 35, "total" => 30, "efforts" => 39, "afh" => 39, ), "2" => array ( "gear" => 35, "total" => 30, "efforts" => 39, "afh" => 39, ), ); \$gear=0; \$total=0; \$efforts=0; \$afh=0; foreach (\$estimate as \$key => \$value) { \$gear=\$gear+\$value['gear']; \$total=\$gear+\$value['total']; \$efforts=\$gear+\$value['efforts']; \$afh=\$gear+\$value['afh']; } echo "<pre>"; \$result = array('gear' => \$gear, 'total' => \$total,'efforts' => \$efforts,'afh' => \$afh); echo "<pre>"; print_r(\$result); you can check the result HERE 点赞 评论 分享 报告相同问题？ 提交 关注问题 相关推荐 更多相似问题 如何计算PHP中相同数组值的总和 php 2018-05-31 10:41 回答 3 已采纳 You might use array_reduce: \$result = array_reduce(\$estimate, function(\$carry, \$item) { if (! PHP - 获取表中显示的值的总和 javascriptmysqlphp 2015-05-15 05:50 回答 1 已采纳 since you storing data in database, you can use another query to sum up all the grand_total from a 如何计算PHP中变量的总和 mysqlphp 2015-09-02 08:47 回答 3 已采纳 Since you already extracted a row from the result, with \$row = mysql_fetch_array(\$result);, the s php获取数组中，相同键名的键值之和 2019-01-27 13:48 铁柱同学的博客 一、记录一下一个数组求相同键名的键值和的简便方法： &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如你有一个数组： \$arr = array( [0]=&gt;array( [0]=&gt;array( 'user_id'=... php 统计二维数组中某个相等值的总个数，并且组合成一个新的数组 2019-08-19 17:38 伟伟哦的博客 <?php \$arr=array( array( 'sv_id'=>1, 'm_id'=>1, 'sv_question1'=>20 ), array( 'sv_id'=>... 小甲鱼零基础入门学习python笔记 2019-08-14 11:06 亦我飞也的博客 一个 Shell 脚本主要由原本需要在命令行输入的命令组成，或在一个文本编辑器中，用户可以使用脚本来把一些常用的操作组合成一组串行。主要用来书写这种脚本的语言叫做脚本语言。很多脚本 语言实际上已经超过简单的... 获取关键php数组具有相同值的值的总和 jsonphp 2016-06-06 10:04 回答 3 已采纳 Try below solution: <?php \$array = array ( '0' => Array ( 'report_id' => 1, 'amount' =& 自动计算动态文本框值的总和 htmljavascriptmysqlphp 2014-12-02 04:46 回答 4 已采纳 HTML: <input name="qty[]" type="text" value="0" /><br /> <input name="qty[]" type= 在php中按列Date计算列的总和 php 2017-01-13 10:36 回答 1 已采纳 You can use SUM() function on required column with GROUP BY clause SELECT SUM(id) FROM your_table golang 组合数总和 2020-09-09 20:11 pardon110的博客 给定一个无重复元素的数组 candidates 和一个目标数 target ，找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明： 所有数字（包括 target）都是正整数。 解... C#基础教程-c#实例教程，适合初学者 2016-08-22 11:13 huangwuming714的博客 在C#语言中，同一个类中的函数，如果函数名相同，而参数类型或个数不同，认为是不同的函数，这叫函数重载。仅返回值不同，不能看作不同的函数。这样，可以在类定义中，定义多个构造函数，名字相同，参数类型或个数... php 获取数组中出现次数最多的值（重复最多的值）与出现的次数 2019-09-17 14:28 人生如初见_张默的博客 \$arr = array(7,7,8,9,10,10,10); \$arr = array_count_values(\$arr); // 统计数组中所有值出现的次数 arsort(\$arr); // 按照键值对数组进行降序排序 \$max_number = reset(\$arr); //出现最多的次数值 ... php数组中某些值的总和[关闭] php 2016-09-09 14:15 回答 1 已采纳 <?php \$arr = [['name'=>'john','age'=>20,'sex'=>'m'], ['name'=>'maria','age' 合并数组时计算相同键值对的总和第一对 - php php 2016-11-16 15:25 回答 1 已采纳 What about this way to rome: \$coll=array(); foreach(array(\$arr,\$arr2) as \$array){ foreach(\$array 数组和组中的产品价格总和 php 2018-07-25 11:35 回答 1 已采纳 \$items = json_decode(\$json,true); foreach(\$items as \$item){ if(empty(\$totalInCategory[\$item['c PHP中的数组与数据结构 2020-11-20 01:56 duoduowangjia的博客 PHP中的数组与数据结构 PHP数组可以将许多其他不同变量类型的值存入一个数组，并且存储容量可以根据与元素的增减自动调整。 根据数组下标提供的方式不同，可以分为索引数组和关联数组 索引数组的索引值为整数 ... list获取指定元素总和_将总和的舍入元素与总和相匹配 2020-07-21 23:12 cunchi8090的博客 list获取指定元素总和 没有完全匹配时 (When there is no exact match) 蛋糕分裂 (The cake split) The cheese cake is precut in 12 slices, and you have played with your friends to win the largest share. ... phpexcel读取excel中数字异常问题 2019-03-15 11:05 whynogome的博客 读取前，为避免excel数据格式不统一，把单元格格式全部改为文本，文件中的数字全部是文本格式 但是读取的结果，php还是自动把数字自动转换成了float格式。但是，蛋疼的是，同样的数据格式，有个别数字被转换成了... 在PHP中按ID显示总和[重复] mysqlphp 2018-02-26 00:41 回答 1 已采纳 Firstly - mysql_* functions are deprecated. Avoid them as much as possible. Secondly, you need to phpredis中文手册 2014-11-19 15:11 摘取天上星的博客 redis中文手册：http://readthedocs.org/docs/redis/en/latest/ 本文是参考《redis中文手册》，将示例代码用php来实现，注意php-redis与redis_cli的区别（主要是返回值类型和参数用法）。目录(使用CTRL+F快速查找... 没有解决我的问题, 去提问```
``` 点击登录 提问题 ◇ 欢迎建议意见 ◇ 回答问题能得到什么 ◇ 如何写高质量的提问和回答 ◇ 问答平台结题规则说明 加急问题 ¥300 一套会议室预约管理系统，有这方面经验的，对接下 ¥200 需求软件：图片批处理软件 ¥150 网络体系结构的实验报告 ¥100 pytorch相关问题求解答，可有偿 ¥100 鼎捷E10 6.0 用户SOP文档 ¥100 python program 要求如下 ¥90 vscode安装extension pack for java插件后报错 ¥60 shor算法的成功率问题 ¥50 windoows server 2012 R2 黑屏命令框按网上的输入代码第一次显示配置错误 第二次就是错误代码50 ¥50 求教学如何使用realsense和树莓派（包括安装软件） ```
``` ```
``` window.csdn.sideToolbar = { options: { afterFinished: function () { setTimeout(function () { var helphtml = '<a class="option-box" data-type="help" href="https://ask.csdn.net/questions/7441224" target="_blank">'+'<img src="https://g.csdnimg.cn/side-toolbar/2.5/images/bangzhucopy.png" alt="" srcset="">'+ '<span class="show-txt">帮助</span></a>'; \$('.csdn-side-toolbar > a:last').before(helphtml); }, 300); }, contentEl: document.getElementsByClassName('floor')[0] } } ```