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)
将整数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)