2013-03-16 99 views
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."; 
} 
+0

如果我运行,我不会像你一样... – apelsinapa 2013-03-16 23:02:02

+1

工程只是[罚款给我](http://codepad.org/gtcfK0iC)。 – hjpotter92 2013-03-16 23:02:17

+0

检查[这个不错的技巧](http://stackoverflow.com/a/994599/1401975)。顺便说一下你的问题是重复的... – HamZa 2013-03-16 23:08:19

回答

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"; 
+0

该解决方案更好,因为它将支持多于整数的键。 – apelsinapa 2013-03-16 23:08:39

+0

谢谢,我不得不修改它来处理我的代码,因为我需要数组中的所有值不仅仅是数组。但是这解决了问题! – 2013-03-16 23:20:54

3

试试这个:

if(is_array($values[0])) 

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

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

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

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

使用is_array是更多的语义,所以在我看来是一个更好的选择。

+1

哦,但代码为我工作[这里](http://codepad.org/gtcfK0iC)。 – hjpotter92 2013-03-16 23:03:00

+0

这很奇怪,但这个答案解决了我的问题。 – 2013-03-16 23:04:11

+0

也许'isset'在PHP版本之间有略微不同的功能。我匆匆浏览手册,但没有显示出来。 – 2013-03-16 23:05:49

1

此代码仅进入,如果分支对我来说,如果阵列中的第一个值显式声明为一个字符串,

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

- 与该行为也不过是逻辑,因为$values[0]是文本字面值'1',并且具有可以使用基于零的索引访问的第一个字符。

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

无论如何,使用is_array作为已经建议的其他答案是正确的方式去这里。

+0

啊是的!我在我的真实代码中使用字符串作为数组的第一个值。 – 2013-03-16 23:08:00

相关问题