带有开关gettype()的PHP输出循环数组给出了奇怪的结果



我有一个数组

Array (
[members] => Array (
[name] => longtext
[datum] => date
[more] => Array (
[0] => a
[1] => b
)
)
[viewable] => 1
[hierarchical] => 1
)

当我尝试循环子数组$array['成员']

foreach( $array['members'] as $k => $v) {    
switch( gettype( $v ) ) {
case "boolean":
echo "boolean";
case "array":
echo "array";
case "string":
echo "string";
}    
}

我希望输出像

string string array

相反,我得到了结果

string string array **string**

我不明白第 4 根弦是从哪里来的。

当我尝试时

foreach($array['members'] as $k => $v) {
echo gettype($v);
}

结果是正确的。有人可以解释一下吗?我还尝试将数组的一个成员更改为另一种类型,因为我 thougt php 会在数组中合并相同的成员类型,但它没有。

迎接

您收到该错误的原因是您的case没有break;

在第三个数组元素上,它转到array但由于没有中断,它也转到string

您的循环应该是这样的:

foreach( $array['members'] as $k => $v) { 
switch( gettype( $v ) ) {
case "boolean":
echo "boolean";
break;
case "array":
echo "array";
break;
case "string":
echo "string";
break;
}    
}

文档:开关

在每种情况下都需要一个中断语句 - 否则你会失败:

foreach( $array['members'] as $k => $v) {    
switch( gettype( $v ) ) {
case "boolean":
echo "boolean";
break;
case "array":
echo "array";
break;
case "string":
echo "string";
break;
}    
}

相关内容

  • 没有找到相关文章

最新更新