最好的方法是什么?

时间:2014-08-08 14:58:21

标签: php

我试图根据某些条件获得不同的总和,需要有20个不同的变量,这些变量将在函数结束时返回。我觉得应该有一个更简单的方法吗?感谢您提供的任何帮助。

function getTotalNutrients($id)
{
    $applications = $this->getApplications($id);
    $nsum = 0;
    $psum = 0;
    $ksum = 0;
    $mgsum = 0;

    // ...

    foreach( $applications as $pro ) {

        $details = $this->getAppliedNutrients($pro->id);
        foreach($details as $nutrients){
            switch($pro->area){
                case "1":
                    $nsum += ($nutrients->n);
                    $psum += $nutrients->p;
                    $ksum += $nutrients->k;
                    $mgsum += $nutrients->mg;
                    break;
                case "2":
                    $tnsum += ($nutreients->n);
                    // ...
                    break;
                case "3":
                    $fnsum += ($nutreients->n);
                    //...
                    break;
                case "4":
                    // ...
                    break;
                case "5":
                    // ...
                    break;
            }
        }
    }

    return array(
        $nsum,
        $psum,
        $ksum,
        $mgsum,
        $tnsum,
        // etc..
        );
}

2 个答案:

答案 0 :(得分:0)

通过添加所有值(如

)来创建数组

$ arraySum [] = array();

$ arraySum [] = $ nsum; $ arraySum [] = $ tnsum; 。 。 。 ECT

最后

使用

array_sum($ arraySum);

如果没有满足您的要求。完全提供你的代码。

答案 1 :(得分:0)

你的设计模式有我的朋友......

您应该创建一个计算不同总和的接口,并返回您选择的tupple(一组不同的值),而不是使用大型开关(打破Open / Closed原则)。

然后按照界面详细信息创建您的AREAS。一旦创建了所有区域计算器,只需创建它们中的每一个并根据id将它们放入一个数组中。然后,使用id加载正确的值并计算在tupple中返回的值...

您的代码看起来会更整洁!