【问题标题】:php - notices when sum values in arrayphp - 在数组中求和时注意
【发布时间】:2015-10-02 03:17:24
【问题描述】:

我有一个数组,我正在循环遍历所有国家/地区的总销售额(将第 1 个月的总销售额加起来为 1 月,将第 2 个月的总销售额加起来为 2 月......)下面的代码有效,但我得到了通知我要清理。我试过isset,但我得到了同样的通知。下面是原始数组、代码和结果,并附上通知。

这是数组:

$结果

array(4) {
  [0]=>
  array(3) {
    ["Month"]=>
    string(1) "1"
    ["Country"]=>
    string(2) "AU"
    ["Total_Sales"]=>
    string(7) "9095.70"
  }
  [1]=>
  array(3) {
    ["Month"]=>
    string(1) "1"
    ["Country"]=>
    string(2) "CA"
    ["Total_Sales"]=>
    string(9) "113993.00"
  }
  [2]=>
  array(3) {
    ["Month"]=>
    string(1) "2"
    ["Country"]=>
    string(2) "AU"
    ["Total_Sales"]=>
    string(7) "7393.65"
  }
  [4]=>
  array(3) {
    ["Month"]=>
    string(1) "2"
    ["Country"]=>
    string(2) "CA"
    ["Total_Sales"]=>
    string(9) "100279.43"
  }

代码:这个循环得到了我需要的结果,但抛出了我不想要的通知。

$newarr=array();
foreach($results as $value) {
    $Month = $value['MONTH'];
    $Total_Sales = $value['Total_Sales'];
    array_key_exists( $Month, $newarr ) ? $newarr[$Month]['MONTH'] = $Month : $newarr[$Month]['MONTH'] = 0;
    array_key_exists( $Month, $newarr ) ? $newarr[$Month]['Total_Sales']+=$Total_Sales : $newarr[$Month]['Total_Sales'] = 0;
}

结果是对的

array(2) {
  [1]=>
  array(2) {
    ["MONTH"]=>
    string(1) "1"
    ["Total_Sales"]=>
    float(123088.7)
  }
  [2]=>
  array(2) {
    ["MONTH"]=>
    string(1) "2"
    ["Total_Sales"]=>
    float(107673.08)

我不想要的通知。

注意:未定义索引:/var/www/html/analytics/views/sales_year_line_data.php 第 134 行中的 Total_Sales

注意:未定义索引:/var/www/html/analytics/views/sales_year_line_data.php 第 134 行中的 Total_Sales

这是我的代码中的第 134 行

array_key_exists( $Month, $newarr ) ? $newarr[$Month]['Total_Sales']+=$Total_Sales : $newarr[$Month]['Total_Sales'] = 0;

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    我认为您会发现此错误发生是因为您使用:MONTH 作为键名,但应该是 Month。此外,因为您使用的是 2 三元,所以您创建了一个 $new 数组的实例,然后在以前不存在的键上使用 +=If/else 可以消除此错误,因为您一次性创建了 $new

    <?php
    error_reporting(E_ALL);
    $results[]  =   array("Month"=>1,"Country"=>"AU","Total_Sales"=>9095.70);
    $results[]  =   array("Month"=>1,"Country"=>"CA","Total_Sales"=>113993.00);
    $results[]  =   array("Month"=>2,"Country"=>"AU","Total_Sales"=>7393.65);
    $results[]  =   array("Month"=>2,"Country"=>"CA","Total_Sales"=>100279.43);
    
    $new    =   array();
    
    foreach($results as $value) {
            // Here is your issue. You have -> $value['MONTH']; Should be -> $value['Month'];
            $month          =   $value['Month'];
            $Total_Sales    =   $value['Total_Sales'];
            // Use one instance of array_key_exists() here to remove errors
            if(array_key_exists($month,$new)) {
                    $new[$month]['Month']       =   $month;
                    $new[$month]['Total_Sales'] +=  $Total_Sales;
                }
            else {
                    $new[$month]['Month']       =   $month;
                    $new[$month]['Total_Sales'] =   $Total_Sales;
                }
        }
    
    print_r($new);
    ?>
    

    给你(没有错误)

    Array
    (
        [1] => Array
            (
                [Month] => 1
                [Total_Sales] => 123088.7
            )
    
        [2] => Array
            (
                [Month] => 2
                [Total_Sales] => 107673.08
            )
    )
    

    【讨论】:

    • 非常好!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多