Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 如何为图表按键求和数组值?_Php_Arrays_Foreach_Sum - Fatal编程技术网

Php 如何为图表按键求和数组值?

Php 如何为图表按键求和数组值?,php,arrays,foreach,sum,Php,Arrays,Foreach,Sum,很抱歉,我看到多个类似的解决方案,但我无法在我的情况下实施它们。我试着用isset检查sum之前是否存在值,但它给了我真实的值,并且无法添加它的实际值。使用下面的代码,只要for循环运行,它就会重复相同的值,并给我错误的和值。请纠正我 我想通过匹配键将数组值添加到单个数组中 我有这个阵列 Array( [0] => Array ( [Customer] => Array ( [created_by] =&

很抱歉,我看到多个类似的解决方案,但我无法在我的情况下实施它们。我试着用isset检查sum之前是否存在值,但它给了我真实的值,并且无法添加它的实际值。使用下面的代码,只要for循环运行,它就会重复相同的值,并给我错误的和值。请纠正我

我想通过匹配键将数组值添加到单个数组中

我有这个阵列

Array(
[0] => Array
    (
        [Customer] => Array
            (
                [created_by] => 3
                [amount] => 475
            )

    )

[1] => Array
    (
        [Customer] => Array
            (
                [created_by] => 5
                [amount] => 199
            )

    )

[2] => Array
    (
        [Customer] => Array
            (
                [created_by] => 1
                [amount] => 199
                [refund_amount] => 200
                [upgrade_amount] => 199
            )

    )

[3] => Array
    (
        [Customer] => Array
            (
                [created_by] => 1
                [amount] => 199
            )

    )

[4] => Array
    (
        [Customer] => Array
            (
                [created_by] => 4
                [upgrade_amount] => 199
            )

    )
) 我在寻找这样的结果

Array(
[3] => Array
    (
        [sale] => 475
        [refund] => 0
        [upgrade] => 0
    )

[5] => Array
    (
        [sale] => 199
        [refund] => 0
        [upgrade] => 0
    )

[1] => Array
    (
        [sale] => 398
        [refund] => 200
        [upgrade] => 199
    )

[4] => Array
    (
        [sale] => 0
        [refund] => 0
        [upgrade] => 199
    )
)

我正在使用此代码获取结果

   foreach($records as $y_key => $y_value){
            //print_r($y_value);
            if(!isset($top_performer[$y_value['Customer']['created_by']])){
                $top_performer[$y_value['Customer']['created_by']]['sale'] = 0;
                $top_performer[$y_value['Customer']['created_by']]['refund'] = 0;
                $top_performer[$y_value['Customer']['created_by']]['upgrade'] = 0;
            }
             $top_performer[$y_value['Customer']['created_by']]['sale']+= $y_value['Customer']['amount'];
             $top_performer[$y_value['Customer']['created_by']]['refund']+= $y_value['Customer']['refund_amount'];
             $top_performer[$y_value['Customer']['created_by']]['upgrade']+=$y_value['Customer']['upgrade_amount'];

        }

您的代码看起来不错,只需检查数组元素是否存在

   foreach($records as $y_key => $y_value){
            if(!isset($top_performer[$y_value['Customer']['created_by']])){
                $top_performer[$y_value['Customer']['created_by']]['sale'] = 0;
                $top_performer[$y_value['Customer']['created_by']]['refund'] = 0;
                $top_performer[$y_value['Customer']['created_by']]['upgrade'] = 0;
            }
             $top_performer[$y_value['Customer']['created_by']]['sale'] += isset($y_value['Customer']['amount']) ? $y_value['Customer']['amount'] : 0;
             $top_performer[$y_value['Customer']['created_by']]['refund'] += isset($y_value['Customer']['refund_amount']) ? $y_value['Customer']['refund_amount'] : 0;
             $top_performer[$y_value['Customer']['created_by']]['upgrade'] += isset($y_value['Customer']['upgrade_amount']) ? $y_value['Customer']['upgrade_amount'] : 0;
    }

您当前的输出是什么?我不明白您的问题,因为您的代码完全符合您的需要:,可能是通知?它在此时给了我正确的值,但当将此代码上载到live server(其中n个数字是数组)时,它将添加最后一个值,直到每个工作结束。谢谢@Jimbot&Sagar,我的代码中有一些错误,我已经弄明白了..使用PHP7,可以缩写为
isset($y_value['Customer']['amount'])$y_值['Customer']['amount']:0
$y_值['Customer']['amount']?0
感谢@ivan Bolnikh的帮助。我已经尝试过这个解决方案,但在live server上仍然得到错误的结果。在得到相同的答案后,我尝试了,我意识到有我的其他问题,我再次检查我的代码。我发现我的主数组有重复的数据,这就是为什么我得到了错误的结果。谢谢你的帮助。抱歉@Nigel Ren,我仍然在使用旧版PHP5.6:)