做这件事的最好方法是什么?


What's the best way to do this?

我试图根据某些条件获得不同的总和,需要有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..
        );
}

创建一个数组

$arraySum[] = array();

$arraySum[] = $nsum;$arraySum[] = $tnsum;...等

结尾

使用

函数($ arraySum);

如果不满足您的要求。提供完整的代码

你有一个设计模式的案例,我的朋友…

不要使用大的开关(打破开/闭原则),你应该创建一个接口来计算不同的和并返回你选择的元组(不同值的集合)。

然后根据接口细节创建您的区域。一旦创建了所有的区域计算器,只需创建每个区域计算器并将它们放入基于id的数组中。然后,使用id加载正确的那个,并计算元组中返回的值…

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