Определить количество измерений в массиве PHP

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

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

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

вы можете попробовать следующее:

 $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); 

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

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

C.

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

 $ 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') как $ subarray) {
         $ max_sub_depth = max (
             $ Max_sub_depth,
             array_max_depth ($ subarray, $ depth + 1)
         );
     }
     return $ max_sub_depth + $ depth;
 }

был исправлен в некоторых вопросах с переходом от одной функции к другой в цикле в 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 на кнопку click .. Я не знаю другого способа заставить его работать .. так что просто назовите свой массив до $ 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.";