PHP比较一个值的智能方式,多维度不使用foreach?

时间:2013-03-07 17:59:40

标签: php multidimensional-array compare

这是一个快速的。有没有办法将给定值与多维预设规则数组进行比较,而不循环我们的规则?

我会举个例子。假设我们正在评估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函数比循环遍历我们的规则要快?

感谢。

2 个答案:

答案 0 :(得分:2)

switch语句会稍微快一些,但由于你正在处理一个4元素数组,几乎所有东西都可以。

如果使用switch语句展开循环,则减少需要评估的表达式的数量,因为在循环中需要进行大于和小于比较。使用switch,您只需要进行一次比较。

如果您定义了正确的回调函数,还有其他PHP函数(如array_filterarray_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;