以下代码可以正常输出并输出我想要的内容。我做了一个foreach循环获取特定字段的值($ CustomFields ...),它是框架变量的一部分。然后仅当条件为“组”时才计算该字段。 在那之后我想要计算所有领域/平均价格。
// ########### Get average hourly rate for group classes
$itemsperhour = array();
$countperhour = 0;
foreach($listings as $listing) {
if ($CustomFields->fieldValue('jr_typeoflesson',$listing,false,false) == 'group') {
$itemsperhour[] = $CustomFields->field('jr_hourlyrateus',$listing,false,false);
$countperhour = $countperhour + 1;
}
}
//print_r($items);
if ($countperhour > 0) {
$totalperhour = array_sum($itemsperhour);
$averageperhour =($totalperhour / $countperhour);
echo round($averageperhour,2);
} else {
echo "No data";
}
unset ($averageperhour);
如上所述,该片段有效。但是,我可以问其他人如何编写与优化这样一段代码相关的脚本(为了速度和可读性? PHP 5.6 +
贾斯珀
答案 0 :(得分:0)
以下是一种优化方式:
$totalperhour = 0;
$countperhour = 0;
foreach($listings as $listing) {
if ($CustomFields->fieldValue('jr_typeoflesson',$listing,false,false) == 'group') {
$totalperhour += $CustomFields->field('jr_hourlyrateus',$listing,false,false);
$countperhour = $countperhour + 1;
}
}
if($countperhour > 0) {
$averageperhour =($totalperhour / $countperhour);
echo round($averageperhour,2);
$averageperhour = '';
} else {
echo "No data";
}
答案 1 :(得分:0)
我希望使用array_reduce函数来获得平均值:
$averageperhour = array_reduce($listings, function($average, $listing) use (&$CustomFields)
{
static $sum = 0;
static $counter = 0;
if ($CustomFields->fieldValue('jr_typeoflesson', $listing, false, false) == 'group') {
$sum += $CustomFields->field('jr_hourlyrateus', $listing, false, false);
$counter ++;
$average = round(($sum / $counter), 2);
}
return $average;
}, 'No data');
echo $averageperhour;
不确定速度提升(需要测试),但这种变体在我看来更具可读性。
答案 2 :(得分:0)
这个怎么样?
...and so on