【问题标题】:Check value against values in array and return key using PHP根据数组中的值检查值并使用 PHP 返回键
【发布时间】:2012-06-15 16:26:11
【问题描述】:

问题:

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

PHP 代码:

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

数组($grades):

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

场景:

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

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

问题:

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

【问题讨论】:

  • 记录变量有多少?
  • +1 用于明确定义问题。你有能力创建一个$record 数组而不是自变量?
  • 总是只有 1 个 $record 变量。

标签: php arrays if-statement comparison logic


【解决方案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
*/

【讨论】:

    【解决方案2】:

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

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

    function returnGrade($record, $grades)
    {
      $return = 'U';
      foreach  ($grades as $key => $value)
      {
        if ($record >= $value)
        {
          $return = $key;
        }
        else
        {
          break;
        }
      }
      return $return;
    }
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        你可以这样做

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

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

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-17
          • 2021-07-04
          • 1970-01-01
          • 1970-01-01
          • 2018-08-25
          相关资源
          最近更新 更多