php输出循环数组与开关gettype()给出奇怪的结果

时间:2018-06-16 05:17:41

标签: php arrays

我有一个数组

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

当我尝试循环子阵列$ array [' members']

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);
}

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

迎接

2 个答案:

答案 0 :(得分:1)

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

在第三个数组元素上,它转到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;
    }    
}

Doc:switch

答案 1 :(得分:1)

你需要在每个案件中都有一个休息陈述 - 否则你会失败:

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