2017-07-07 47 views
0

对不起,我看到多个类似的解决方案,但我无法在我的情况下实施它们。我试图检查是否存在价值之前存在价值,但它给我真正的价值,不能够增加其实际价值。使用波纹管代码,只要循环运行并给出错误的总和值,它就会重复相同的值。请纠正我。如何通过图表的键为数组值进行求和?

我想通过匹配键数组值添加到单个阵列..

我有这个阵列...

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']; 

     } 
+1

什么是你的电流输出? –

+0

我不明白你的问题,因为你的代码完全符合你的需求:http://sandbox.onlinephpfunctions.com/code/9e7f683636fcd417059e066326509addad77dc73](http://sandbox.onlinephpfunctions.com/code/9e7f683636fcd417059e066326509addad77dc73),可能是这是通知? – Jimbot

+0

它给了我在这个poing正确的价值,但是当上传这个代码到活动服务器,其中n数是阵列它添加最后一个值,直到foreach结束他们的工作。 – SAHAR

回答

0

您的代码看起来不错,你只需要检查,如果数组元素存在

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; 
    } 
+0

用PHP7,可以缩写'isset($ y_value ['Customer'] ['amount'])? $ y_value ['Customer'] ['amount']:0' to'$ y_value ['Customer'] ['amount'] ?? 0' –

+0

感谢@ivan Bolnikh的帮助。我已经尝试过这种解决方案,但在活服务器上仍然出现错误结果。在得到相同的答案后,我尝试了解我的其他问题,然后再次检查我的代码。我发现我的主数组有重复的数据,这就是为什么我得到错误的结果。谢谢你的帮助。 – SAHAR

+0

对不起@尼格尔,我仍然使用旧的PHP 5.6 :) – SAHAR

相关问题