2

问题:

我有一个在 $record 中设置的值,例如 1.69。然后我有一个包含不同等级和值的数组。我想先将 $record 与最高值进行比较,看看它是否高于或等于,如果不是,则转到低于它的值,依此类推。

PHP代码:

$record1 = '1.69';
$record2 = '2.90';
$record3 = '3.40';
$record4 = '3.80';

数组($等级):

Array
(
    [G] => 2.8
    [VG] => 3.8
)

设想:

$record1 应该与数组中的最大值进行比较,这将返回 false。它将与低于最高值的值进行比较,该值也将返回 false。如果两者都返回 false,则返回字符串 'U',否则返回键 G 或 VG。

  • 记录 1 应产生 U。
  • 记录 2 应产生 G。
  • 记录 3 应产生 G。
  • 记录 4 应产生 VG。

问题:

我可以做很多 if 语句作为解决方案,但我想知道是否有任何聪明的方法可以更好地进行此检查?

4

4 回答 4

1

首先,尝试按降序对数组进行排序。

然后,在 while 循环中,检查初始数组元素(使用key()函数)是更大还是更小,如果为 FALSE,则使用next()函数移动到下一个元素并进行比较。

当您想要的比较返回 TRUE 时,循环应该结束。

于 2012-06-12T18:36:11.740 回答
1

使用简单的逻辑:

$grades  = array('G' => 2.8, 'VG' => 3.8);
$records = array(1.69, 2.9, 3.4, 3.8);

foreach ($records as $v) {
    $res = ($v < $grades['G'] ? 'U' : ($v < $grades['VG'] ? 'G' : 'VG'));
    echo "$v = $res\n";
}

/*
1.69 = U
2.9 = G
3.4 = G
3.8 = VG
*/
于 2012-06-12T18:36:46.120 回答
1

我会编写一个函数来遍历你的$grades数组,设置结果的值并在值大于输入时立即中断。

像这样的东西(未经测试):

function returnGrade($record, $grades)
{
  $return = 'U';
  foreach  ($grades as $key => $value)
  {
    if ($record >= $value)
    {
      $return = $key;
    }
    else
    {
      break;
    }
  }
  return $return;
}
于 2012-06-12T18:33:10.277 回答
0

你可以这样做

首先按记录数循环旋转,并通过此函数检查值是否在数组中in_array()

如果找到结果,则通过此函数获取密钥array_search("value_to_search","array_variable");

希望这对你有帮助

于 2012-06-12T18:36:40.680 回答