Определить количество измерений в массиве PHP - PullRequest
19 голосов
/ 23 января 2010

Есть ли способ определить, сколько измерений в массиве PHP?

Ответы [ 5 ]

17 голосов
/ 23 января 2010

Хорошая проблема, вот решение, которое я украл из Руководства PHP :

function countdim($array)
{
    if (is_array(reset($array)))
    {
        $return = countdim(reset($array)) + 1;
    }

    else
    {
        $return = 1;
    }

    return $return;
}
4 голосов
/ 23 января 2010

Вы можете попробовать это:

$a["one"]["two"]["three"]="1";

function count_dimension($Array, $count = 0) {
   if(is_array($Array)) {
      return count_dimension(current($Array), ++$count);
   } else {
      return $count;
   }
}

print count_dimension($a);
1 голос
/ 23 января 2010

Это работает для массивов, где каждое измерение не имеет элементы одного типа. Возможно, потребуется пройти через все элементы.

$a[0] = 1;
$a[1][0] = 1;
$a[2][1][0] = 1;

function array_max_depth($array, $depth = 0) {
    $max_sub_depth = 0;
    foreach (array_filter($array, 'is_array') as $subarray) {
        $max_sub_depth = max(
            $max_sub_depth,
            array_max_depth($subarray, $depth + 1)
        );
    }
    return $max_sub_depth + $depth;
}
1 голос
/ 23 января 2010

Как и большинство процедурных и объектно-ориентированных языков, PHP НЕ имеет встроенных многомерных массивов - он использует вложенные массивы.

Рекурсивная функция, предложенная другими, грязная, но самая близкая вещь к ответу.

С

0 голосов
/ 06 сентября 2017

было исправлено на Некоторые проблемы с переходом от одной функции к другой в цикле в php


Эта двойная функция будет переходить к последнему измерению каждого массива в $ a, а когда она больше не является массивом, она будет отображать количество циклов, которое она выполнила, чтобы получить разделитель | Недостатком этого кода является то, что он только повторяет и не может быть возвращен (обычным способом).

function cc($b, $n)
{
    $n++.' ';
    countdim($b, $n);

}
function countdim($a, $n = 0)
{
    if(is_array($a))
    {
        foreach($a as $b)
        {
            cc($b, $n);
        }
    }else
    {
        echo $n.'|';
    }
}
countdim($a);

Здесь я сделал функцию с возвратом, но ... это возвращение из html, затем "GET" обратно в php при нажатии кнопки .. Я не знаю другого способа заставить его работать .. просто назовите ваш массив $ a и нажмите кнопку: /

$max_depth_var = isset($_REQUEST['max_depth_var']) ? $_REQUEST['max_depth_var'] : 0;
?>
<form id="form01" method="GET">
<input type="hidden" name="max_depth_var" value="<?php
function cc($b, $n)
{
    $n++.' ';
    bb($b, $n);
}
function bb($a, $n = 0)
{
    if(is_array($a))
    { 
        foreach($a as $b)cc($b, $n); 
    }else
    {
    echo $n.', ';
    };
}
bb($a); ?>">
<input type="submit" form="form01" value="Get max depth value">
</form><?php
$max_depth_var = max(explode(', ', rtrim($max_depth_var, ",")));
echo "Array's maximum dimention is $max_depth_var.";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...