[英]PHP: why my switch always picks the same value?
function getValue($v) {
$b = 22;
switch ($v) {
case ($v <= $b * 1.2):
$v1 = $b; break;
case ($v1 > $b * 1.2 && $v1 <= $b * 2.2):
$v1 = $b * 2; break;
case ($v1 > $b * 2.2 && $v1 <= $b * 3.2):
$v1 = $b * 3; break;
case ($v1 > $b * 3.2):
$v1 = $b * 4; break;
default:
$v1 = $b;
}
return $v1;
}
getValue(25)
或getValue(45)
始終返回22。
我認為您不能使用這樣的開關。 它需要價值。 它不接受布爾條件。 在這里檢查http://php.net/manual/en/control-structures.switch.php
function getValue($v) {
$b = 22;
switch ($v) {
case ($v <= $b * 1.2):
$v1 = $b; break;
case ($v > $b * 1.2 && $v <= $b * 2.2):
$v1 = $b * 2; break;
case ($v > $b * 2.2 && $v <= $b * 3.2):
$v1 = $b * 3; break;
case ($v > $b * 3.2):
$v1 = $b * 4; break;
default:
$v1 = $b;
}
return $v1;
}
您錯誤地使用$v1
而不是$v
。
上面的代碼將起作用。
您正在檢查錯誤的變量,因此在整個case
語句中應將$v1
替換$v1
$v
。 而且, switch
語句被設計為接受常量值,因此最好將它們全部替換為if
。
另外,表達式的某些部分是多余的,因為您已經檢查了它們。 在檢查了$v <= $b * 1.2
並發現它不是之后,無需在下一個表達式中檢查$v > $b * 1.2
。 您的default
子句永遠無法匹配,因為$v
所有值均<= $b * 3.2
或> $b * 3.2
。
function getValue($v) {
$b = 22;
if ($v <= $b * 1.2) {
return $b;
} elseif ($v <= $b * 2.2) {
return $b * 2;
} elseif ($v <= $b * 3.2) {
return $b * 3;
} else {
return $b * 4;
}
}
使用switch
,您可以根據案例測試給定的值。
因此,您的語句確實執行$v == ($v <= $b * 1.2)
, $v == ($v1 > $b * 1.2 && $v1 <= $b * 2.2)
等。
您可以進行切換並測試true
:
function getValue($v) {
$b = 22;
switch (true) {
case ($v <= $b * 1.2):
$v1 = $b; break;
case ($v1 > $b * 1.2 && $v1 <= $b * 2.2):
$v1 = $b * 2; break;
case ($v1 > $b * 2.2 && $v1 <= $b * 3.2):
$v1 = $b * 3; break;
case ($v1 > $b * 3.2):
$v1 = $b * 4; break;
default:
$v1 = $b;
}
return $v1;
}
但是在這種情況下, if
/ else
似乎是更好的選擇:
function getValue($v) {
$b = 22;
if ($v <= $b * 1.2) {
$v1 = $b;
} elseif ($v1 > $b * 1.2 && $v1 <= $b * 2.2) {
$v1 = $b * 2;
} elseif ($v1 > $b * 2.2 && $v1 <= $b * 3.2) {
$v1 = $b * 3;
} elseif ($v1 > $b * 3.2) {
$v1 = $b * 4;
} else {
$v1 = $b;
}
return $v1;
}
看一下您的案例標簽:它們是關系運算的結果,所以它們的總和為true或false! %v
將與這些布爾值進行比較。 這就是為什么您在輸入案例中觀察到類似的輸出的原因。
用if
塊替換switch
,一切都會好起來。 並查看您對$v1
的使用情況; 你是那個意思嗎
在您的開關中,我可以在第二,第三和第四種情況下看到變量$ v1,因此請考慮一下我們不通過第一種情況的情況,那么變量$ v1呢? 它尚未設置,因此總是默認情況或第一種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.