检查值是否为多维数组

时间:2013-03-16 22:59:04

标签: php arrays 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.";
}

3 个答案:

答案 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作为已建议的其他答案是正确的方法。