FOR输出不以php中的数组0元素开头

And*_*day 0 php arrays for-loop if-statement

我有第0个数组元素的问题作为FOR周期的输出.我希望服务器打印字母ABCDE; 如果某些东西与数组中的元素不同,那么它应该被打印出来.所以我为此制定了条件并转换声明.

但是数组的第0个元素总是作为不同的元素打印出来.我不知道我做错了什么.你能帮我么?你能解释一下为什么会这样吗?

<?php
    $array = array(0,1,2,3,4,"something");
    for($i=0;$i<count($array);$i++){
        echo '<br>'.$i;
        if ($array[$i] == 'something') {
            echo ' something ';
        } else {
            switch ($array[$i])
                {   case "0":
                        echo ' A';
                        break;
                    case "1":
                        echo ' B';
                        break;
                    case "2":
                        echo ' C';
                        break;
                    case "3":
                        echo ' D';
                        break;
                    case "4":
                        echo ' E';
                        break;
                    default:;
                };
            };
        };
    ?>
Run Code Online (Sandbox Code Playgroud)

我的输出是这样的:

0 something 
1 B
2 C
3 D
4 E
5 something
Run Code Online (Sandbox Code Playgroud)

但我期待这样:

0 A 
1 B
2 C
3 D
4 E
5 something
Run Code Online (Sandbox Code Playgroud)

zam*_*uts 6

将整数0与字符串进行比较时,字符串"something"将转换为整数.看到:

var_dump((int) 0); // yields int 0
var_dump((int) 'something'); // yields int 0
Run Code Online (Sandbox Code Playgroud)

请参阅PHP错误请求39579.请注意,这不是一个错误,并且可以像"预期的那样".

正确的比较应该使用严格的相等(3个等号来测试类型):

if ($array[$i] === 'something') {
    echo ' something ';
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以暂时在比较期间投射"已知/假定"类型,并仍然保持宽松的平等:

if ((string) $array[$i] == 'something') {
    echo ' something ';
}

// OR with strval

if (strval($array[$i]) == 'something') {
    echo ' something ';
}
Run Code Online (Sandbox Code Playgroud)