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
天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 20

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

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

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

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

原生写法

<?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));
3年前 评论
妖都水鬼 3年前
朝东 3年前
steffenkong (作者) 3年前
$flag = false;
array_map(function($value) use(&$flag){
    if(is_array($value)) $flag=true;
},$data);
print_r($flag);
3年前 评论
if (count($array) !== count($array, 1)) {
    echo '多维数组';
}
3年前 评论

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