2013-09-08 19:42

# 在foreach结束之前的数组元素的总和，PHP图

Problem I'm having occured while building php script to automaticaly generate graph based on values from database.

I'm having all 12 months listed on X line and sum of monthly income for each month on Y line. In order to keep same size of graph everytime i want to convert sum of monthly income to % inpact on all graph, to do that i will use simple formula:

(array element / sum of all array elements) * 100

this should tell which % part of all graph is each array element

code is rather straight forward:

``````foreach(\$years as \$year) {
// Do something
foreach(\$months as \$month) {
foreach( // this foreach is getting monthly income foreach month \\ ) {
// so in here we get \$total_by_date[\$year][\$month];
}
\$year_total[\$year] += \$total_by_date[\$year][\$month]; //sum of (sum of each month income)
?>
<div style="background:black;height:20px;width:<?php echo (\$total_by_date[\$year][\$month] / \$year_total[\$year]) * 100 ?>px;">div> //drawing graph based on given values
<?php
}
}
``````

I checked it in various conditions and it appears to be working corectly, i got list of months foreach year, within months i got monthly income foreach month properly displayed. Still, essentialy its not working, in order it to fuly work i would need to get total income foreach year before i start outputing that draws graph, instead while each element from foreach loop is being scanned and displayed suming function is doing array walk so its incresing total value with each scanned month, at the end is giving few errors beacuse of january and february 0 income, even though year income should be 6700 - in few first months is displaying 2400, then 3500 then 5400 and finally 6700 at december.

i guess that i would need to get total year income before foreach starts with outputs month by month, the problem is i dont know how to do that. I came up with:

``````if(empty(\$year_sub[\$year])) { unset(\$year_sub[\$year]); continue; }
``````

placed before div output, it helped a little, it removed all the initial 0's so it doesnt crash at the begining anymore, but still is doing sum on the fly which screws up the idea.

perhaps someone know how to start and finish suming before output or some other great solution. Thank You in advance.

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

（数组元素/总和 所有数组元素）* 100

``` ``` foreach（\$ year as \$ year）{
//做一些事情
foreach（\$ month作为\$ month）{
foreach（//这个foreach正在获得月收入预期 月\\）{
//所以在这里我们得到\$ total_by_date [\$ year] [\$ month];
}
\$ year_total [\$ year] + = \$ total_by_date [\$ year] [\$ month];  //（每月收入之和）之和
？＆gt;
＆lt; div style =“background：black; height：20px; width：＆lt;？php echo（\$ total_by_date [\$ year] [\$ month]  / \$ year_total [\$ year]）* 100？＆gt; px;“＆gt; div＆gt;  //基于给定值绘制图形
＆lt;？php
}
}

我在各种条件下检查它并且它似乎正在工作 ，我得到了一些月份的清单，在几个月内我得到了正确显示的月收入。 尽管如此，它本身并不起作用，为了使其工作，我需要在开始输出绘制图形之前得到总收入，而不是从foreach循环中的每个元素被扫描并显示求和函数正在进行数组行走所以它 每个扫描月份的总价值增加，最终在1月和2月0收入时几乎没有错误，即使年收入应该是6700  - 在前几个月显示2400，然后是3500然后是5400，最后是12月的6700。  / p>

我想我需要在foreach开始逐月输出之前得到总年收入，问题是我不知道该怎么做。 我想出了：

if（empty（\$ year_sub [\$ year]））{unset（\$ year_sub [\$ year]）; 继续;  }

放在div输出之前，它有点帮助，它删除了所有的初始0，所以它不会在开始时崩溃，但仍然在做 这个想法搞砸了。

或许有人知道如何在输出或其他一些很好的解决方案之前开始和完成总结。

``````
` `
``` 写回答 好问题 提建议 关注问题 收藏 分享 邀请回答 ```
``` 1条回答 默认 最新 dongshuo9350 2013-09-08 19:53 已采纳 You are printing the result before the total for the year is completed (code not tested). foreach(\$years as \$year) { // Do something // 1. Sum of the year foreach(\$months as \$month) { foreach( // this foreach is getting monthly income foreach month \\ ) { // so in here we get \$total_by_date[\$year][\$month]; } \$year_total[\$year] += \$total_by_date[\$year][\$month]; //sum of (sum of each month income) } // 2. Convert to % and print foreach(\$months as \$month) { ?> <div style="background:black;height:20px;width:<?php echo (\$total_by_date[\$year][\$month] / \$year_total[\$year]) * 100 ?>px;">div> //drawing graph based on given values <?php } } 已采纳该答案 评论 解决 无用 打赏 分享 举报 报告相同问题？ 提交 关注问题 相关推荐 更多相似问题 在foreach结束之前的数组元素的总和，PHP图 php 2013-09-08 19:42 回答 1 已采纳 You are printing the result before the total for the year is completed (code not tested). foreach 我们如何使用php从数组中获取唯一数据的总和 php 2017-11-23 18:17 回答 2 已采纳 Checkout the live result here: https://3v4l.org/nHijY \$arr = array(); foreach(\$bookings as \$book 使用存储在数组中的php值的总和更新MySQL表列 mysqlphp 2016-10-18 19:00 回答 2 已采纳 You can use a correlated subquery, or join the invoices table to a derived table. After you have i php计算多维数组中所有值总和的方法 2020-12-19 19:55 本文实例讲述了php计算多维数组中所有值总和的方法。分享给大家供大家参考。具体实现方法如下： php 内置函数 array_sum() 函数返回数组中所有值的总和，只能返回一维数组的总和； 计算多维数组所有值的和就要自定义... PHP中的数组与数据结构 2020-11-20 01:56 duoduowangjia的博客 PHP数组可以将许多其他不同变量类型的值存入一个数组，并且存储容量可以根据与元素的增减自动调整。 根据数组下标提供的方式不同，可以分为索引数组和关联数组 索引数组的索引值为整数 关联数组以字符串为索引值 ... PHP统计数值数组中出现频率最多的10个数字的方法 2020-12-19 14:08 本文实例讲述了PHP统计数值数组中出现频率最多的10个数字的方法。分享给大家供大家参考。具体分析如下： 该问题属于TOPK范畴，统计单词出现频率，做报表，数据统计的时会常用！ php代码如下： //随机生成数值数组 ...如何迭代多维数组并计算php中每行的总和？ php 2015-06-19 21:49 回答 3 已采纳 When you do this loop: foreach(\$array as \$cases) { if(\$cases['allergies'] == \$_POST['allergi php - 如何从3维数组中求和一个值 php 2018-03-20 10:11 回答 4 已采纳 As you want to know more about foreach, here is a more verbose solution using it : \$total = 0; \$t 获取关键php数组具有相同值的值的总和 jsonphp 2016-06-06 10:04 回答 3 已采纳 Try below solution: <?php \$array = array ( '0' => Array ( 'report_id' => 1, 'amount' =& php get( )数组6,php file_get_contents实现取文件中数组元素的方法 2021-03-19 03:59 weixin_39721807的博客 本篇文章主要介绍php file_get_contents实现取文件中数组元素的方法，感兴趣的朋友参考下，希望对大家有所帮助。用file_get_contents()抓取了 这个网址上的内容... PHP 二维数组 键值相同的 value 相加 2020-11-18 14:41 亲兄弟的博客 php \$arr = array( array( 'user_id' => 100, 'number' => 1, ), array( 'user_id' => 100, 'number' => 2, ), array( 'user_id' => 100, 'number' => 2, ), array( . PHP学习笔记2：数组 2021-11-30 15:49 魔芋红茶的博客 php不像其他编程语言那样，有数组、切片、映射、队列、集合等多种数据结构，这些在php中都可以用数组来进行表示。 语法 定义 php的数组由键值对组成，在概念上更像是Go语言的map或者Python的dict： \$student = array... 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 数组不总和高于7的数字 php 2014-06-26 22:46 回答 2 已采纳 Numbers beginning with 0 are treated as octal numbers, and may only contain digits from 0 to 7. An 深度理解PHP中for与foreach两个循环结构遍历数组的区别 2019-10-02 13:13 aijianhuang8866的博客 遍历一个数组是编程中最常见不过的了，这里讨论下for和foreach两种方法： 首先，我们先准备两个用于遍历的数组： \$arr1=array(1=>'a', 3=>22, 5=>'b', 4=>'c', 8=>'d'); \$arr2=array('a'=>'aaa... 浅析PHP数组的实现 2020-01-02 13:45 力软快速开发平台的博客 value的存储结构，让我们处理数据可以游刃有余，并且在一般情况下增删查改都是O(1)的时间复杂度，并表现出一些特点让我们对其内部的结构充满了好奇。 「数组内存申请不需要自己控制」：数组的内存申请和释放是内部... php 计算多维数组中所有值的总和 2015-06-18 12:11 weixin_30552635的博客 php 内置函数 array_sum() 函数返回数组中所有值的总和，只能返回一维数组的总和； 计算多维数组所有值的和就要自定义函数了； 1 function get_sum(\$array) { 2 \$num = 0; 3 foreach(\$array as \$k => \$v)... 尝试在Laravel中获取特定的数组键和值的一部分 laravelphp 2018-11-17 02:03 回答 2 已采纳 You have to get the values in an array by their keys. This is an associative array with strings as PHP—数组内部排序+数组字段求和+数组合并 2020-01-04 17:22 荆轲刺勤王的博客 1、当前有一个二维数组\$arr，需要根据其中表示百分比的列subsidy_percent进行降序排序： //根据百分比排序 \$subsidy_percent = array_column(\$arr,'subsidy_percent'); array_multisort(\$subsidy_percent,SORT_... 没有解决我的问题, 去提问```
``` 点击登录 提问题 ◇ 欢迎建议意见◇ 回答问题能得到什么？◇ 如何写出高质量提问和回答？◇ 问答使用帮助文档◇ 问答公告 加急问题 ¥200 被迫升级Windows11之后打游戏总是卡屏蓝屏 ¥200 win 10安装python库pycld3报错 ¥170 急! 面试题请教 - 创建数据库和查询 ¥100 如何实现手机远程控制手机 ¥100 神经网络信号调制类型识别2/4psk fsk ask ¥100 N2N配置supernode，运行一段时间后连接不上了 ¥100 转发视频部分成功部分失败 ¥100 怎么用paddleseg内置的cityscapes相关内容实现城市视频的图像分割 ¥100 电路板上的RTR JTAG ICE接口如何通过仿真器读写，芯片：ksz8995xa\ksz8695x ¥100 渗透文件包 进入软件服务器获取用户权限 是什么原理 ```
``` ```
``` 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] } } ```