gpt4 book ai didi

php - 比较开关内数字的奇怪问题

转载 作者:行者123 更新时间:2023-12-03 23:04:06 25 4
gpt4 key购买 nike

我正尝试像这样使用 switch case 从类别 id 生成 css 类名。

我在 switch case 中有多个条件,但我们只会将这个视为它创建奇怪的输出。

示例代码:

<?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';
}

关于php - 比较开关内数字的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31334193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com