<?php
$arr = [
[
"name" => "d",
"parent" => "b",
],
[
"name" => "e",
"parent" => "b",
],
[
"name" => "f",
"parent" => "c",
],
[
"name" => "g",
"parent" => "c",
],
[
"name" => "b",
"parent" => "a",
],
[
"name" => "c",
"parent" => "a",
],
[
"name" => "a",
"parent" => "",
],
];
/**
* 深度 d
* 数量 n
* 复杂度 d*n
*/
$depth = [];
$O = 0;
for($i=0; $i<count($arr); $i++){
$set = false;
foreach ($arr as $key => $dArray){
$name = $dArray["name"];
$parent = $dArray["parent"];
if(!isset($depth[$name])){
if(empty($parent)){
$depth[$name] = 1;
unset($arr[$key]);
$set = true;
} else {
if(isset($depth[$parent])){
$depth[$name] = $depth[$parent]+1;
unset($arr[$key]);
$set = true;
} else {}
}
} else {}
$O++;
}
if(!$set){
break;
} else {}
}
echo "循环次数={$O}";
var_dump($depth);
输出:
循环次数=17
D:\wamp64\www\test.php:73:
array (size=7)
'a' => int 1
'b' => int 2
'c' => int 2
'd' => int 3
'e' => int 3
'f' => int 3
'g' => int 3