PHP-如何快速确定php多维数组的深度?

PHP-如何快速确定php多维数组的深度?

清晨说ぺ晚安 发布于 2017-08-06 字数 353 浏览 1036 回复 6

例如有一个多维数组:

array(
array(
array(1,3,4),
array(
array(
1,2,3
)
)
),
array(
array(1,2),
array(1)
)
)

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

甜柠檬 2017-10-17 6 楼

我来个简单的计算深度函数:

function array_depth($array) {
  $max_depth = 1;
  foreach ($array as $value) {
    if (is_array($value)) {
      $depth = array_depth($value) + 1;
      if ($depth > $max_depth) {
        $max_depth = $depth;
      }
    }
  }        
  return $max_depth;
}

$array = array( array("11"), array(),array( array(array("5", "6"), "7", "8")),array( array(array("5", "6"), "7", "8")), "9", "10");
echo array_depth($array);
浮生未歇 2017-10-12 5 楼

使用SPL中的Iterator,在RecursiveIteratorIterator 类中有个getDepth方法,获得深度

偏爱自由 2017-10-07 4 楼

代码应该要处理参数不是数组的情况。此种情况下,深度是0.

 function array_depth($a) {
if (is_array($a)) {
$max_depth = 0;
foreach ($a as $key => $value) {
$depth = array_depth($value);
if ($depth > $max_depth) {
$max_depth = $depth;
}
}
return $max_depth + 1;
}
return 0;
}

而且,题主所举的例子,深度应该为4.不是5.

晚风撩人 2017-09-05 3 楼

我也奉献一个我的:

 <?php
function wei($arr){
global $wei,$num;
if(is_array($arr))$num++;
for($i=0;$i<count($arr);$i++){
if(is_array($arr[$i])){
wei($arr[$i]);
$element = true;
}
}
if(true != $element){
$wei[] = $num;
$num = 1;
}
}
$test_arr[] = 1;
$test_arr[] = array(array(1,array(1,array(1,array(1,array(1,array(1,array(1,array(1,array(1,array(1,array(1,array(1,array(1,0))))))))))))));
$test_arr[] = array(1,array(1,array(1,array(1,array(1,array(1,0))))));
wei($test_arr);
echo max($wei);
?>

清晨说ぺ晚安 2017-08-24 2 楼

 $arr = array(array( array(array(“5″, “6″), “7″, “8″)),2,array(array(array(“5″, “6″), “7″, “8″,array( “7″,“8″))),4);
echo getArrDemp($arr);
function getArrDemp($array){
static $offset = 0;
$arr_str = serialize($array);
$num = substr_count($arr_str,'{');
$result = array();
for($i=0;$i<$num;$i++){
$l_pos = strpos($arr_str, '{', $offset);
$temp_str = substr($arr_str,0,$l_pos);
$offset = $l_pos + 1;
$result[] = substr_count($temp_str,'{')-substr_count($temp_str,'}');
}
array_multisort($result,SORT_DESC);
return ++$result[0];
}

想挽留 2017-08-19 1 楼

利用递归实现,代码如下:

 <?php
function countdim($array) {
static $dimcount = 1;
if (is_array(reset($array))) {
$dimcount++;
$return = countdim(reset($array));
} else {
$return = $dimcount;
}
return $return;
}

$array = array( array( array(array("5", "6"), "7", "8")),array( array(array("5", "6"), "7", "8")), "9", "10", array("11"), array());

echo countdim($array);
?>