当我运行这段代码时,怎么会得到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.";
}
当我运行这段代码时,怎么会得到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.";
}
试试这个:
if(is_array($values[0]))
编辑:这将只检查数组的第一个元素。您应该遍历每个元素以检查其是否真正多维。
此代码检查数组的第一个元素是否也是数组。isset
只检查变量是否为NULL
.
isset
在您的示例中未按预期工作。PHP 版本或设置之间的功能可能略有不同。我在手册中没有看到任何内容,但也许您可以:
http://php.net/manual/en/function.isset.php
使用is_array
更具语义性,因此在我看来是一个更好的选择。
$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";
如果数组中的第一个值显式声明为字符串,则此代码仅对我进入 if 分支,
$values = array('1',2);
– 并且这种行为只不过是合乎逻辑的,因为$values[0]
文本文字'1',并且它具有可以使用从零开始的索引访问的第一个字符。
所以我猜你的真实数据是字符串类型——或者它可能取决于 PHP 版本(我在 5.3.16 下测试)。
无论如何,使用is_array
已经建议的其他答案是正确的方法。