【问题标题】:Any 'other' way to SUM variables using PHP?使用 PHP 对变量求和的任何“其他”方式?
【发布时间】:2010-07-07 20:29:40
【问题描述】:

在我拥有的表格中,消费者可以选择将血液测试、视力测试或两者(组合)添加到多个参与者的帐户中。这一切都是一次性完成的。根据所做的选择,我可以选择“选择”并回显相应的价格,但最难构建脚本来“添加或求和”所有变量。

我知道 array_sum() 功能,但要么 a) 没有正确使用它,b) 不适用于我的情况。

我的代码示例是:

    <tr>
        <td>Test(s) Ordered:</td>
        <td>
        <?php
            if($_SESSION['F'.$j.'Tests'] == "Blood") {
                $prem = "62.95";
                echo "Blood Test - $".$prem." per month";
            }
            elseif($_SESSION['F'.$j.'Tests'] == "Vision") {
                $prem = "60.00";
                echo "Vision Test - $".$prem." per month";
            }
            elseif($_SESSION['F'.$j.'Tests'] == "BVCombo") {
                $prem = "122.95";
                echo "Blood and Vision - $".$prem." per month";
            }
        ?>
        </td>

其中 $j 是在上面的 FOR 循环中确定的登记者人数。这个 $j 变量的范围可以从 1 到 16,在人与人之间的注册完成之前,我永远不会知道有多少注册者。

最终,我正在尝试完成以下代码,但不知道该怎么做:

$sum = $prem1 + $prem2 + $prem3 + $prem4

其中 $prem1 和 $prem2 与特定个人相关。每个人只有一个保费总额,因此 $prem1 可能等于 $62.95、60.00 或 122.95 等后续参与者。

**

使用的最终解决方案

** 我首先创建了 $total = array();我的整个表单的 FOR 循环之外的变量。那么:

        <?php
            if($_SESSION['F'.$j.'Tests'] == "Blood") {
                $prem = "62.95";
                echo "Blood Test - $".$prem." per month";
                $total[] = $prem;
            }
            elseif($_SESSION['F'.$j.'Tests'] == "Vision") {
                $prem = "60.00";
                echo "Vision Test - $".$prem." per month";
                $total[] = $prem;
            }
            elseif($_SESSION['F'.$j.'Tests'] == "BVCombo") {
                $prem = "122.95";
                echo "Blood and Vision - $".$prem." per month";
                $total[] = $prem;
            }
        ?>

最后,完全脱离循环:

<?php 
    } 
    $summ = array_sum($total);
    $premiumtotal = number_format($summ,2,'.','');
    echo "$".$premiumtotal;
?>

感谢大家的帮助!

【问题讨论】:

    标签: php loops sum


    【解决方案1】:

    为了使用array_sum,您需要一个数组。将所有包裹存储在一个数组中,如下所示:

    $prem = array();
    while (cond()) {
    
        //...
        if (cond2())
            $prem[] = 60;
        //...
    }
    $total = array_sum($prem);
    

    我希望你明白了。

    【讨论】:

    • 已经这样做了 - 它不起作用。只返回数组中的最后一个 $prem 值,因为已经进入 FOR 循环
    • @JM4 您是否包含了[]?它基本上是对数组进行推送操作。
    • @Artefacto - 明白了,我没有在循环之外包含数组变量来开始。谢谢!
    • @JM4 这不是绝对必要的;如果未定义第一个 $var[] = ... 将初始化数组;尽管如此,这是一个很好的做法,因为有时后面的循环可能没有迭代。
    • @Artefacto - 没有定义之前它确实会导致错误。此外,echo 语句没有按应有的方式“完全”发挥作用。将 $prem 更改为 $prem[] 时, echo "Blood test - $".$prem." per month" 会抛出错误。
    【解决方案2】:

    你可以这样做:

       <tr>
            <td>Test(s) Ordered:</td>
            <td>
            <?php
    
                if($_SESSION['F'.$j.'Tests'] == "Blood") {
                    $prem = "62.95";
                    $total += $prem;
                    echo "Blood Test - $".$prem." per month";
                }
                elseif($_SESSION['F'.$j.'Tests'] == "Vision") {
                    $prem = "60.00";
                    $total += $prem;
                    echo "Vision Test - $".$prem." per month";
                }
                elseif($_SESSION['F'.$j.'Tests'] == "BVCombo") {
                    $prem = "122.95";
                    $total += $prem;
                    echo "Blood and Vision - $".$prem." per month";
                }
            ?>
            </td>
    

    编辑:我误解了这个问题,并且看到您想要所有登记者的总数。为此已更改代码。

    【讨论】:

    • 我已经能够通过简单地查看 $prem 来获得单个登记者的总数,我正在尝试获得所有登记者的总数。根据 IF 语句,单个登记者只能有 1 个 $prem 变量。我认为您对 += 有一些了解
    • @JM4 :我更新了代码,因此它可以为您提供所有参与者的总数。
    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 2010-11-06
    • 2012-02-03
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2016-01-19
    相关资源
    最近更新 更多