0

当我运行这段代码时,怎么会得到I am a multidimensional array!(第一个块)的输出。我以为它会进入第二个街区,但事实并非如此。我在这里想念什么?

$values = array('1','2');
if(isset($values[0][0])){
    echo "I am a multidimensional array!";
}else{
    echo "I am not a multidimensional array.";
}
4

3 回答 3

3

试试这个:

if(is_array($values[0]))

编辑:这将只检查数组的第一个元素。您应该遍历每个元素以检查其是否真正多维。

此代码检查数组的第一个元素是否也是数组。isset只检查变量是否为NULL.

isset在您的示例中未按预期工作。PHP 版本或设置之间的功能可能略有不同。我在手册中没有看到任何内容,但也许您可以:

http://php.net/manual/en/function.isset.php

使用is_array更具语义性,因此在我看来是一个更好的选择。

于 2013-03-16T23:00:30.957 回答
3
$values = array(1,array(1,2));


$multi = false;
if(is_array($values)){
    foreach($values as $k=>$v){
        if(is_array($v)){
            $multi = true;
            break;
        }
    }
}

echo $multi ? "multi" : "not multi";
于 2013-03-16T23:04:51.173 回答
1

如果数组中的第一个值显式声明为字符串,则此代码仅对我进入 if 分支,

$values = array('1',2);

– 并且这种行为只不过是合乎逻辑的,因为$values[0]文本文字'1',并且它具有可以使用从零开始的索引访问的第一个字符。

所以我猜你的真实数据是字符串类型——或者它可能取决于 PHP 版本(我在 5.3.16 下测试)。

无论如何,使用is_array已经建议的其他答案是正确的方法。

于 2013-03-16T23:06:50.993 回答