Есть ли способ определить, сколько измерений существует в массиве 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.";