也许我错了,但从你问题的第一部分来看,我认为你不需要获取数组的上一个或下一个键/项。
我想在类型中创建 if 条件
if (($variable >=2) && ($variable <3)) { echo '10'; }
您似乎有一些区间,您想知道哪个区间包含$variable 的值,并为每个区间打印不同的值。
对此最简单的解决方案是使用一组级联的if 语句:
if ($variable < 2) { // $variable < 2
echo('N/A');
} elseif ($variable < 3) { // 2 <= $variable < 3
echo(10);
} elseif ($variable < 4) { // 3 <= $variable < 4
echo(14);
} elseif ($variable < 5) { // 4 <= $variable < 5
echo(15);
} elseif ($variable < 8) { // 5 <= $variable < 8
echo(16);
} elseif ($variable < 14) { // 8 <= $variable < 14
echo(17);
} elseif ($variable < 51) { // 14 <= $variable < 51
echo(18);
} elseif ($variable < 94) { // 51 <= $variable < 94
echo(19);
} else { // 94 <= $variable
echo(20);
}
此策略效果很好,并且易于阅读和理解。
但是,如果在编写代码时不知道范围列表(及其值)(例如,它是从数据库加载的),则它不起作用。
在这种情况下,可以使用简单的foreach 循环来遍历列表以识别正确的范围。
function getValue($input)
{
$limits = array(
2 => 10,
3 => 14,
4 => 15,
5 => 16,
8 => 17,
14 => 18,
51 => 19,
94 => 20,
);
foreach (array_reverse($limits, TRUE) as $key => $value) {
if ($key <= $input) {
return $value;
}
}
return 'N/A';
}
echo(getValue(2)); # 10
echo(getValue(6)); # 16
echo(getValue(25)); # 18
echo(getValue(51)); # 19
echo(getValue(100)); # 20
函数array_reverse() 返回一个元素以相反顺序排列的数组。传递TRUE 作为第二个参数使其保留原始数组的键/值关联。
foreach 循环将输入值与数组的键以相反的顺序进行比较。当找到小于输入值的键时,它是范围下限并返回关联的值。
如果输入值小于数组的任何键,则表示$variable < 2,并返回N/A,因为问题中没有描述这种情况。
如果您需要多次运行此代码和/或范围列表很大,那么最好将边界列表按降序排序并删除对array_reverse() 的调用(仅使用$bounds)。