我有一個存儲數值的數組。像這樣:將數值放入數組範圍
$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
我發現很難應用如果其他規則來搜索數組值並返回密鑰 –