【问题标题】:PHP Array Sum By same key value pair needs to CalculatedPHP Array Sum 通过相同的键值对需要计算
【发布时间】:2016-09-23 08:51:32
【问题描述】:
<?php 
error_reporting(E_ALL);
$test_array = Array(Array
(
    "pid" => 1,
    "encounter" => 20,
    "code" => abc,
    "fee" => 300.00
),
Array
(
    "pid" => 1,
    "encounter" => 20,
    "code" => abc,
    "fee" => 300.00
),
Array
(
    "pid" => 2,
    "encounter" => 20,
    "code" => abc,
    "fee" => 80
),
Array
(
    "pid" => 3,
    "encounter" => 20,
    "code" => xyz,
    "fee" => 90
),
Array
(
    "pid" => 5,
    "encounter" => 40,
    "code" => xyz,
    "fee" => 100
),
Array
(
    "pid" => 3,
    "encounter" => 40,
    "code" => xyz,
    "fee" => 100
),
Array
(
    "pid" => 2,
    "encounter" => 20,
    "code" => abc,
    "fee" => 80
),
Array
(
    "pid" => 1,
    "encounter" => 20,
    "code" => xyz,
    "fee" => 40
));
//Declaration...
$pre_pid = "";
$pre_encounter = "";
$pre_code = "";
$pre_fee = "";
$sum_charges = 0;
/*Foreach loop*/
$i=0;
foreach($test_array as $my_arr){
    $pre_pid = $my_arr['pid'];
    $pre_encounter = $my_arr['encounter'];
    $pre_code = $my_arr['code'];
    if($pre_pid == $my_arr['pid'] && $pre_encounter == $my_arr['encounter'] && $pre_code == $my_arr['code']){
        echo "FEE-AMOUNT=".$my_arr['fee'];
        $sum_charges+=$my_arr['fee'];
        echo '<br/>';
    }
$i++;
}
//Getting Sum = 1090
//Actual Sum I needed = 710
?>

你好朋友,我正在尝试上面的代码,我希望费用应该由具有相同 3 个键值对的人计算。 例如,如果每个数组的 3 个键值相同,则仅计算这些费用金额。

【问题讨论】:

  • 在此处实现代码,不要使用 pastebin 或其他东西,这些链接不是永久的..
  • 在此处粘贴您的代码
  • 或前后数组示例
  • 你试过这个answer了吗?
  • 问题不清楚,能否具体说明一下什么时候加费?

标签: php arrays


【解决方案1】:

如果我理解您的问题,则每次其他 3 列具有相同值时,您都需要对费用列求和。我稍微定制了你的代码,这样你就可以知道每个元素的总成本。

//Declaration...
$pre_pid = "";
$pre_encounter = "";
$pre_code = "";
$pre_fee = "";
$sum_charges = 0;
$sum_array = array();
$total_fees = 0;
/*Foreach loop*/

foreach($test_array as &$my_arr){

    $pre_pid = $my_arr['pid'];
    $pre_encounter = $my_arr['encounter'];
    $pre_code = $my_arr['code'];
    $pre_fee = $my_arr['fee'];
    $fee_ammount = $pre_fee;
    $duplicates_check = array();

    foreach($test_array as $value) {
        if($pre_pid == $value['pid'] && ($pre_encounter != $value['encounter'] || $pre_code != $value['code'])){

            $duplicate = false;

            foreach($duplicates_check as $duplicate_array) {
                if($duplicate_array == $value)
                    $duplicate =true;
            }
            if(!$duplicate) {
                $fee_ammount += $value['fee'];
                $duplicates_check[] = $value;
            }
        }
    }
    $my_arr['total_fee'] = $fee_ammount;

    if(!isset($sum_array[$my_arr['pid']])) {
        $sum_array[$my_arr['pid']] = $my_arr['total_fee'];
        echo 'pid => '.$my_arr['pid'].', total fees => '.$my_arr['total_fee'].'<br />';
        $total_fees += $my_arr['total_fee'];
    }
}

echo 'Total : '.$total_fees;
var_dump($sum_array);

【讨论】:

  • 我手动查了一下,没有710 sum 匹配pid、遭遇和代码。您能告诉我们必须添加哪些数组才能获得 710 作为答案吗?
  • Pid 1 (Only 300+40) Pid 2 (80) Pid 3 (90+100) pid 5 (100) 这里 pid=1 case 我只想要 300 一次因为相同的 pid,encounter 和 code . pid=3 遇到不同的情况,这就是添加 100 的原因。
  • 按预期工作,非常感谢先生,非常好的逻辑感谢
  • 我还有一个疑问,我应该如何计算这里的总和,即 710 out of loop
  • 修改了代码,如果它满足您的需求,请不要忘记检查我的答案。谢谢
猜你喜欢
  • 2020-01-11
  • 2021-11-13
  • 2015-04-29
  • 2013-03-17
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
相关资源
最近更新 更多