广度遍历获取最大宽度
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