我试图像这样使用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,即使它们都具有相同的数据类型?
我知道它们是字符串,我应该将字符串与字符串进行比较,但是为什么它只适用于一个示例而不适用于另一个示例?

最佳答案

0709octal 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';
}

07-24 09:29