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