Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Echo语句以某种方式修复了while循环问题,需要去掉Echo_Php_Arrays_While Loop - Fatal编程技术网

Php Echo语句以某种方式修复了while循环问题,需要去掉Echo

Php Echo语句以某种方式修复了while循环问题,需要去掉Echo,php,arrays,while-loop,Php,Arrays,While Loop,我试图制作一个线条图,显示每天累计的总数。我写了一个循环来查找每天的总数,我认为这个逻辑是合理的。为了验证正在比较的日期,我添加了两个echo语句来进行可视化比较,并尝试逐步了解正在发生的事情。当我输入两条echo语句时,数组开始按我预期的那样工作,但我不知道为什么。我尝试使用var dump来查看它是否是变量类型,但无论哪种情况,它都会调用$date字符串。然而,如果没有这两个日期数组位置上的echo语句,我得到的总数是我应该得到的总数的两倍,因为本月到目前为止只有17天,我得到33或34个条

我试图制作一个线条图,显示每天累计的总数。我写了一个循环来查找每天的总数,我认为这个逻辑是合理的。为了验证正在比较的日期,我添加了两个echo语句来进行可视化比较,并尝试逐步了解正在发生的事情。当我输入两条echo语句时,数组开始按我预期的那样工作,但我不知道为什么。我尝试使用var dump来查看它是否是变量类型,但无论哪种情况,它都会调用$date字符串。然而,如果没有这两个日期数组位置上的echo语句,我得到的总数是我应该得到的总数的两倍,因为本月到目前为止只有17天,我得到33或34个条目。有没有一种方法可以格式化它,使它继续工作,但去掉echo语句,因为这最终将是一个导入的png文件?我相信答案很简单,但我对这方面还不熟悉。我很感激你的回答

while($rows=odbc\u fetch\u row($result)){
$unit=odbc_结果($result,“单位成本”);/*单位成本四舍五入*/
$unit_成本=整数($unit,2);
$ext=odbc_结果($result,“ext_成本”);/*扩展成本四舍五入*/
$ext_成本=整数($ext,2);
$date[]=odbc_结果($result,“date_created”);
echo(上一个(日期));
echo(结束($日期));
if(prev($date)!=end($date)){//如果上一个元素的日期与当前数组的日期不匹配:
$total[]=$sum;//将总和报告给total数组中的条目,将总和变量归零。
$sum=0;
$sum=$sum+$ext;
}
else{//如果两个元素的日期相同:
$sum=$sum+$ext;//将此行的扩展成本添加到总计$sum中,并在该日期结束后作为$total中的元素报告。
}
}//结束时
印刷费(合计);
调用并实际移动数组的内部记录指针,这会在主动读写时产生奇怪的行为。调用
if()中的那些函数来执行
=比较将把数组的指针移动到一个混乱的地方

替代
prev()/end()
的解决方案是将从ODBC获取的行单独存储在变量中,并在每次循环迭代期间将其存储为
$previous
,以与当前迭代的数组进行比较

此外,我建议不要使用
odbc\u fetch\u row()
odbc\u result()
,而是将其切换到将返回关联数组的位置,从而消除对
odbc\u result()
的调用


将代码分解为逻辑单元。首先,提取数据。第二,进行任何计算

$extCosts = array();

while ( odbc_fetch_row($result) ) { // http://php.net/manual/en/function.odbc-result.php

    $ext = odbc_result($result,"ext_cost");
    $ext_cost = round($ext,2);
    $date = odbc_result($result,"date_created");

    $extCosts[$data][] = $ext_cost;

}

print_r($extCosts);
阵列$extCosts应类似于:

2015-01-01
    2
    1
    5
2015-01-02
    2
2015-01-03
    4
    7
然后简单地使用PHP的数组函数来获得和

$sums = array();
foreach ( $extCosts as $k => $v ) {
    $sums[$k] = array_sum($v);
}

print_r($sums);

谢谢,这已经解决了我的问题。是的,sum是在循环之外初始化的。我应该包括在内。这非常有帮助。
$sums = array();
foreach ( $extCosts as $k => $v ) {
    $sums[$k] = array_sum($v);
}

print_r($sums);