Есть ли способ определить, сколько измерений существует в массиве PHP?
Определить количество измерений в массиве PHP
Ответ 1
Хорошая проблема, вот решение, которое я украл из руководства PHP:
function countdim($array)
{
if (is_array(reset($array)))
{
$return = countdim(reset($array)) + 1;
}
else
{
$return = 1;
}
return $return;
}
Ответ 2
вы можете попробовать следующее:
$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);
Ответ 3
Как и большинство процедурных и объектно-ориентированных языков, PHP не реализует многомерные массивы - он использует вложенные массивы.
Рекурсивная функция, предлагаемая другими, беспорядочна, но самое близкое к ответу.
С.
Ответ 4
Этот метод работает для массивов, где каждое измерение не имеет одного и того же типа элементов. Возможно, потребуется пройти все элементы.
$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; }
Ответ 5
был исправлен в Некоторые проблемы с переходом от одной функции к другой в цикле в 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 maximum dimention is $max_depth_var.";