PHP switch case语句首次循环执行结果不符合预期问题咨询
PHP switch语句执行异常原因分析
核心错误:switch语法使用逻辑错误
PHP中switch语句的执行逻辑是:将switch(表达式)中表达式的结果,**松散比较(==)**每一个case后的值,匹配到相等项时进入对应分支执行。你当前的写法完全违背了该逻辑:
- 你在
switch括号中传入的是循环下标$item,但case后写的是布尔类型的判断表达式$arr[$item] == 5、$arr[$item] == 6,最终实际比较的是$item和判断结果的布尔值true/false。
首行异常匹配的具体原因
当第一次循环$item = 0时:
- 第一个
case的表达式先计算:$arr[0] == 5等价于3 == 5,结果为布尔值false - switch执行比较逻辑:
$item == 第一个case的值等价于0 == false - PHP的松散比较规则中
0和false的判断结果为true,所以直接进入第一个case分支,输出了异常结果。
正确的写法参考
如果要判断数组元素的值是否等于5/6,应该把switch中的表达式改为数组元素值:
<?php $arr = [ 3, 4, 5, 6, "apple", 7.2, -10, "banana", 5, 5.1, 6, "okke" ]; $item = 0; while ( $item < count($arr) ) { echo $item." - "; // 把switch的比较值改为数组元素 switch ( $arr[$item] ) { case 5: echo $arr[ $item ]." --> This is 5<br />"; break; case 6: echo $arr[ $item ]." --> This is 6<br />"; break; default: echo " --> Not found<br />"; } $item++; } ?>
内容的提问来源于stack exchange,提问作者lemme
相关产品推荐
相关产品推荐

