0

我对第 0 个数组元素作为 FOR 循环的输出有疑问。我希望服务器打印字母 ABCDE;如果某些东西与数组中的元素不同,则应该打印其他东西。所以我为此制定了条件和 switch 语句。

但是数组的第 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:;
                };
            };
        };
    ?>

我的输出是这样的:

0 something 
1 B
2 C
3 D
4 E
5 something

但我期待这个:

0 A 
1 B
2 C
3 D
4 E
5 something
4

1 回答 1

6

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

var_dump((int) 0); // yields int 0
var_dump((int) 'something'); // yields int 0

请参阅PHP 错误请求 39579。请注意,这不是错误,并且按“预期”工作。

正确的比较应该使用严格的相等(3 个等号同时测试valuetype):

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

或者,您可以在比较期间临时转换“已知/假定”类型,但仍保持松散相等:

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

// OR with strval

if (strval($array[$i]) == 'something') {
    echo ' something ';
}
于 2013-10-13T12:54:05.160 回答