PHP 如何判断一个数组是一维还是多维数组?  

如何判断一个数组是否为多维数组?

为了使用方便,我写了一个函数代码如下:

  /**
     * 是否为多维数组
     * @param array $arr
     * @return bool
     */
    private function isMultipleArray(array &$arr): bool
    {
        if (count($arr) <= 0) {
            return false;
        }

        if (count($arr) == count($arr, COUNT_RECURSIVE)) {
            return false;
        }

        return true;
    }

但是当我用这种数组测试的时候:

$testArr = [[],[]];

这个方法也就失效了,虽然这个数组没有数据,但它的确是二维数组!

所以,社区的高手们,有啥高招让它能够准确的判断?


最后项目代码修改:

    /**
     * 是否为多维数组
     * @param array $arr
     * @return bool
     */
    private function isMultipleArray(array &$arr): bool
    {
        if (count($arr) <= 0) {
            return false;
        }

        if (count($arr) == count($arr, COUNT_RECURSIVE)) {
            foreach ($arr as $tempArr) {
                if (is_array($tempArr)) {
                    return true;
                }
            }
            return false;
        }

        return true;
    }
php
莫等闲,白了少年头,空悲切
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 10

isset($array[0])可以不?

2年前 评论
bigbug-gg (楼主) 2年前
我爱大可乐 (作者) 2年前
bigbug-gg (楼主) 2年前
private function isMultipleArray(array &$arr): bool
{
  return collect($arr)->every(function ($item){
       return is_array($item) && $item;
    });
}
2年前 评论
function isCramMultipleArray(array $array): bool
{
    return collect($array)->every(fn($item) => is_array($item) && $item);
}
2年前 评论
bigbug-gg (楼主) 2年前
小李世界 (作者) 2年前

isset($array[0]) && is_array($array[0])

2年前 评论
bigbug-gg (楼主) 2年前
deatil (作者) 2年前
foreach ($array as $item) {
        if (is_array($item)) {
             return true;
        }
    }
return false;
2年前 评论

原生写法

<?php

$arr = [[],[],1];


/**
 * @param $arr
 * @return bool
 * 判断是否二维数组
 */
function isCramMultipleArray($arr) {
    if (!is_array($arr) || count($arr) <= 0) return false;
    $arr2 = array_map(function ($item) {
        return is_array($item);
    },$arr);
    return in_array(true,$arr2);
}

var_dump(isCramMultipleArray($arr));
2年前 评论
妖都水鬼 2年前
朝东 2年前
steffenkong (作者) 2年前

方法太多了,可以判断数组第一个元素是否是数组,可还可以使用count 函数的第二个参数(是否递归)

1: is_array(current ($arr))

2: count($array) !== count($array, COUNT_RECURSIVE);

另外命名一定要精确,不精确的命名不如用拼音,多维数组是 multidimension

2年前 评论
小李世界 2年前
还不出来 2年前
$flag = false;
array_map(function($value) use(&$flag){
    if(is_array($value)) $flag=true;
},$data);
print_r($flag);
2年前 评论
if (count($array) !== count($array, 1)) {
    echo '多维数组';
}
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!