回答編集履歴
2
chousei
answer
CHANGED
@@ -14,14 +14,12 @@
|
|
14
14
|
['id' => 8, 'parent' => 7],
|
15
15
|
];
|
16
16
|
$result=array_map(function($x,$y){
|
17
|
-
$x["index"
|
17
|
+
return array_merge($x,["index"=>0]);
|
18
|
-
return $x;
|
19
18
|
},$y=array_values(array_filter($arr,function($x){
|
20
19
|
return is_null($x["parent"]);
|
21
20
|
})),array_keys($y));
|
22
21
|
|
23
22
|
$i=0;
|
24
|
-
|
25
23
|
while(true){
|
26
24
|
$indexs=array_map(function($x){
|
27
25
|
return $x["id"];
|
@@ -30,8 +28,7 @@
|
|
30
28
|
}));
|
31
29
|
if(count($indexs)==0) break;
|
32
30
|
$result=array_merge($result,array_map(function($x) use($i){
|
33
|
-
$x["index"
|
31
|
+
return array_merge($x,["index"=>$i+1]);
|
34
|
-
return $x;
|
35
32
|
},array_filter($arr,function($x) use($indexs){
|
36
33
|
return in_array($x["parent"],$indexs);
|
37
34
|
})));
|
1
調整
answer
CHANGED
@@ -1,2 +1,43 @@
|
|
1
1
|
データが膨大ならSQLなどで対応するのが現実的です。
|
2
|
-
いわゆる入れ子集合モデルというアプローチになります
|
2
|
+
いわゆる入れ子集合モデルというアプローチになります
|
3
|
+
|
4
|
+
# 参考
|
5
|
+
```PHP
|
6
|
+
$arr=[
|
7
|
+
['id' => 1, 'parent' => null],
|
8
|
+
['id' => 2, 'parent' => 1],
|
9
|
+
['id' => 3, 'parent' => 2],
|
10
|
+
['id' => 4, 'parent' => null],
|
11
|
+
['id' => 5, 'parent' => 4],
|
12
|
+
['id' => 6, 'parent' => 5],
|
13
|
+
['id' => 7, 'parent' => 5],
|
14
|
+
['id' => 8, 'parent' => 7],
|
15
|
+
];
|
16
|
+
$result=array_map(function($x,$y){
|
17
|
+
$x["index"]=0;
|
18
|
+
return $x;
|
19
|
+
},$y=array_values(array_filter($arr,function($x){
|
20
|
+
return is_null($x["parent"]);
|
21
|
+
})),array_keys($y));
|
22
|
+
|
23
|
+
$i=0;
|
24
|
+
|
25
|
+
while(true){
|
26
|
+
$indexs=array_map(function($x){
|
27
|
+
return $x["id"];
|
28
|
+
},array_filter($result,function($x) use($i){
|
29
|
+
return $x["index"]==$i;
|
30
|
+
}));
|
31
|
+
if(count($indexs)==0) break;
|
32
|
+
$result=array_merge($result,array_map(function($x) use($i){
|
33
|
+
$x["index"]=$i+1;
|
34
|
+
return $x;
|
35
|
+
},array_filter($arr,function($x) use($indexs){
|
36
|
+
return in_array($x["parent"],$indexs);
|
37
|
+
})));
|
38
|
+
$i++;
|
39
|
+
}
|
40
|
+
usort($result,function($x,$y){return $x["id"]-$y["id"];});
|
41
|
+
print_r($result);
|
42
|
+
|
43
|
+
```
|