1

这是一个快速的。有没有一种方法可以将给定值与预设规则的多维数组进行比较,而无需遍历我们的规则?

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

谢谢。

4

2 回答 2

2

switch 语句会稍微快一些,但由于您正在处理一个 4 元素数组,所以几乎任何事情都可以。

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

如果您定义正确的回调函数,还有其他类似的 PHP 函数array_filter可能array_reduce会导致相同的结果,但您现在拥有的可能与其他任何函数一样好。

于 2013-03-07T18:02:42.263 回答
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;
于 2013-03-07T18:22:14.507 回答