根据数组中的值检查值并使用 PHP 返回键

Posted

技术标签:

【中文标题】根据数组中的值检查值并使用 PHP 返回键【英文标题】:Check value against values in array and return key using 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 变量。 【参考方案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");

希望对你有帮助

【讨论】:

以上是关于根据数组中的值检查值并使用 PHP 返回键的主要内容,如果未能解决你的问题,请参考以下文章

php 获取数组第一个key 第一个键值对 等等

PHP 协程示例A

PHP 协程示例A

php 获取数组第一个key 第一个键值对 等等

rmongodb 没有为键返回不同的值

从JSON中获取重复的对象键的值,并只用一个键替换返回。