我试图像这样使用switch case
从类别ID生成CSS类名称。
我在切换的情况下有多种情况,但我们只会将其视为创建奇怪的输出。
样例代码:
<?php
$value = '907';//base value
$value_array = str_split($value);//create array of string, if its int.
var_dump($value_array);//debug whats in array
switch($value_array[0]){
case 9:
$final = 'i came inside 9';
if($value_array[1].$value_array[2] == 07){
//check whther last 2 digits are 07
$final = 'i came inside 907';
}else if($value_array[1].$value_array[2] == 09){
//chcek whether last 2 digits are 09
$final = 'i came inside 909';
}
break;
}
echo $final;
上面的代码以
[$value is 907]
形式输出:array(3) {
[0]=>
string(1) "9"
[1]=>
string(1) "0"
[2]=>
string(1) "7"
}
i came inside 907
这是正确的行为。但是,如果我将基本值从907更改为909,则输出为
[$value is 909]
。array(3) {
[0]=>
string(1) "9"
[1]=>
string(1) "0"
[2]=>
string(1) "9"
}
i came inside 9
输出应为
i came inside 909
。这是为什么?
为什么它们都适用于
907
而不适用于909
,即使它们都具有相同的数据类型?我知道它们是字符串,我应该将字符串与字符串进行比较,但是为什么它只适用于一个示例而不适用于另一个示例?
最佳答案
07
和09
是octal numbers,其中09
是无效的八进制数字,因此最终将为0。这就是为什么您的代码无法按预期运行的原因。
要解决它,只需将其放在引号中,例如
if($value_array[1].$value_array[2] === "07"){
//check whther last 2 digits are 07
$final = 'i came inside 907';
}else if($value_array[1].$value_array[2] === "09"){
//chcek whether last 2 digits are 09
$final = 'i came inside 909';
}