之前有一个需求,需要判断一个数组是一维还是二维数组,如果是二维的话就要使用foreach循环来处理
在网上搜了一下给出来的都是下面所写的方式:
if(count($updata) == count($updata,1)) { // 一维 } else { // 二维 }
首先我要说的是,上面这种判断方法并没有错,也可以进行判断,**但是它仅仅只适用于下面这种数组:
array( 'test' => 1, 'ok' => 2, 'ooo' => 3 )
上面这个数组判断一维自然是没有什么问题的。
我再举个例子,通过下面这个例子,使用上面的判断的话,就 没有办法准确判断 了:
array( 'test' => 1, 'ok' => 2, 'ooo' => array( 'ff' => 5 ) )
可以看到,我只是把下面这个ooo的值改成了数组,这样的情况下,上面的判断写法就会出错,会判断这个数组是一个二维数组,很明显,这并不是我们想要的
那么我们如何规避这种情况,准确的判断出数组到底是一维数组还是二维数组,其实有个很简单的方法,按照下面的写法,就可以完美的规避,有利就有弊,性能上会稍微的下降一点,但是并没有多大影响:
$updata = array( 'test' => 1, 'ok' => 2, 'ooo' => array( 'ff' => 5 ) ) ; $json = json_encode($updata); preg_match('#^\[.*?]$#', $json, $arr); if ($arr) { echo '二维'; } else { echo '一维'; }
没错,就是使用正则的方式来判断,将数组转换为json后,通过正则匹配前后是否存在中括号,如果存在的话,不用想,果断输出二维数组,反之则是一维数组。
执行结果对比如下
代码如下:
执行结果:
很明显可以看出,使用判断1,识别出来的就是一维数组,而使用网上的方法识别出来的是二维数组
接下来我们改变一下数组结构( 我在数组外层加了一个array):
看看判断结果:
这里的结果都是二维,是我们需要的效果
以上就是两种判断方法的对比结果
今天分享的是工作中遇到的问题的解决方案,如果你有不同的解决方案,并且更高效的话,欢迎评论区讨论。
解决方案很简单,这里做一个记录,也给才入门的同学一个思路,本期分享结束,感谢观看!