广度、深度遍历(php版复杂数组,包括关联数组和数组以及嵌套数组)

广度遍历获取最大宽度

    function array_width($array)
    {
       $max_width = 0;
        //同级数组
        $equal_array = [];
        //次级数组
        $sub_array = [];
        foreach ($array as $value) {
            if (is_array($value) && count($value) > 0) {
                    $equal_array[] = $value;
                    foreach ($value as $v1) {
                        $sub_array[] = $v1;
                    }
            }
        }

        $width = count($array);
        // 次级数组是否长度为0
        if (count($sub_array) > 0) {
            $max_depth = $width + array_width($sub_array) - count($equal_array);
        } else {
            $max_depth = $width;
        }
        return $max_depth;
    }
深度遍历获取最大深度
    function array_depth($array)
    {
        $max_deep = 1;
        foreach ($array as $value) {
            if(is_array($value)){
                $deep = array_depth($value) + 1;
                // 递归完毕后,判断每次递归的深度是否大于当前的最大深度
                if ($deep > $max_deep) {
                    $max_deep = $deep;
                }
            }
        };

        return $max_deep;
    }
    function test($array = [])
    {
        print_r($array);
        echo 'width:' . $this->array_width($array) . "\n";
        echo 'height:' . $this->array_depth($array) . "\n";
    }
$test_array = [1,2,3,[[123 => [123 => '123']]],[123,'123' => '123',[123,123]],[123,1,[123,123]]];
$t1->test($test_array);

测试结果

测试数组如下:array (
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 
  array (
    0 => 
    array (
      123 => 
      array (
        123 => '123',
      ),
    ),
  ),
  4 => 
  array (
    0 => 123,
    123 => '123',
    124 => 
    array (
      0 => 123,
      1 => 123,
    ),
  ),
  5 => 
  array (
    0 => 123,
    1 => 1,
    2 => 
    array (
      0 => 123,
      1 => 123,
    ),
  ),
)

测试数组的width:12
测试数组的height:4

猜你喜欢

转载自blog.csdn.net/weixin_42625306/article/details/87928782
今日推荐