这是一个快速的。有没有办法将给定值与多维预设规则数组进行比较,而不循环我们的规则?
我会举个例子。假设我们正在评估1到10岁的学生。我们希望用几个词来分配绩效评估。所以我们有标记范围和它们代表的内容,例如:
$evaluation = array(
array('from' => 1, 'to' => 3, 'comment' => 'Stop watching TV'),
array('from' => 4, 'to' => 6, 'comment' => 'Keep trying'),
array('from' => 7, 'to' => 8, 'comment' => 'Almost there'),
array('from' => 9, 'to' => 10, 'comment' => 'EMC2')
);
一名学生得了8分,所以我们做了:
$grade = 8;
foreach($evaluations as $evaluation) {
if($grade >= $evaluation['from'] && $grade <= $evaluation['to']) {
echo $evaluation['comment'];
}
}
我猜这很好。但有更简洁的方法吗?也许内置的PHP函数比循环遍历我们的规则要快?
感谢。
答案 0 :(得分:2)
switch语句会稍微快一些,但由于你正在处理一个4元素数组,几乎所有东西都可以。
如果使用switch
语句展开循环,则减少需要评估的表达式的数量,因为在循环中需要进行大于和小于比较。使用switch
,您只需要进行一次比较。
如果您定义了正确的回调函数,还有其他PHP函数(如array_filter
和array_reduce
)可能会导致相同的结果,但您现在拥有的函数可能与其他任何函数一样好。< / p>
答案 1 :(得分:1)
认为你已经过度思考了一下这个数组,你可以用每个范围的最大值来键入,它的数据少一点,评估的数量也少,但老实说它看起来像是一个微优化
$evaluation = array(
3 => 'Stop watching TV',
6 => 'Keep trying',
8 => 'Almost there',
10 => 'EMC2'
);
$grade = 8;
foreach ($evaluation as $limit => $comment) {
if ($limit < $grade) continue;
break;
}
echo $comment;