我有一个存储数值的数组。像这样:将数值放入数组范围
$ranges = array(1=> '33', 2=> '66', 3=> '99');
我有一个叫$result
变量,让我在0-100之间的动态值。
例如:
- 如果
$result
是等于或大于33且小于66时,则返回的键应该是1 - 如果
$result
是等于或大于66并小于99时,则返回的键应该是2 - 如果
$result
等于或大于99,则返回的键应该是3个
上ħ任何想法这可以实现吗?
我有一个存储数值的数组。像这样:将数值放入数组范围
$ranges = array(1=> '33', 2=> '66', 3=> '99');
我有一个叫$result
变量,让我在0-100之间的动态值。
例如:
$result
是等于或大于33且小于66时,则返回的键应该是1$result
是等于或大于66并小于99时,则返回的键应该是2$result
等于或大于99,则返回的键应该是3个上ħ任何想法这可以实现吗?
对于你的条件
该功能可能是这样的:
function getRangeIndex($i) {
$ranges = array(1=> '33', 2=> '66', 3=> '99');
$prevValue = 0;
$prevKey = null;
foreach($ranges as $currKey=>$currValue) {
if($prevValue <= $i && $i < $currValue) {
return $prevKey;
}
$prevValue = $currValue;
$prevKey = $currKey;
}
return $currKey;
}
的测试功能简单的循环:
for($result = 0 ; $result <= 100 ; $result++) {
echo "$result - " . getRangeIndex($result) . "\n";
}
如果你的范围总是为了你不会需要检查的下限,所以像这样的工作:
$resndx= 0;
foreach($ranges as $key=>$value) {
if ($value > $result) {
break;
}
$resndx= $key;
}
echo "Result $result is in $resndx";
您如何解决这个问题部分取决于您希望条件逻辑的动态性如何。如果您只是检查这个值的数组,那么设置几个if
和else if
语句的序列并不重要。
但是,如果您希望这样做更具动态性,您应该先重新排列输入。当你像你这样组织阵列时,你会混淆不同的极限值。图33是用于0
范围的上限值独家,66是用于1
范围的上限值独家,99是用于2
范围的上限值独家和100是上包容限制为3
范围。
一个天真的解决方案是简单地将33,66和99的值向下移动一个,然后遍历列表执行<=
检查该范围。这意味着32将返回0
和33将返回1
,但32.5也将返回1
。因此,不存在任何其他信息,这将让你所需要的:
$ranges = array(0 => 33, 1 => 66, 2 => 99, 3 => 101);
foreach ($ranges as $key => $value)
{
if ($result < $value)
{
$best = $key;
break;
}
}
如果使用其他ELSEIF这是最好的做法 – RDK
写作是你遇到问题的逻辑的哪一部分? – Kermit
我发现很难应用如果其他规则来搜索数组值并返回密钥 –