回答編集履歴

2

改善

2016/06/15 04:32

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -40,11 +40,13 @@
40
40
 
41
41
  $chars = explode(',', $str);
42
42
 
43
+ $last = array_pop($chars);
44
+
43
45
  $root = [];
44
46
 
45
47
  $current = &$root;
46
48
 
47
- foreach (array_slice($chars, 0, -1) as $char) {
49
+ foreach ($chars as $char) {
48
50
 
49
51
  $current[$char] = [];
50
52
 
@@ -52,11 +54,7 @@
52
54
 
53
55
  }
54
56
 
55
- foreach (array_slice($chars, -1) as $char) {
56
-
57
- $current = $char;
57
+ $current = $last;
58
-
59
- }
60
58
 
61
59
  unset($current);
62
60
 

1

追記

2016/06/15 04:32

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,3 +1,7 @@
1
+ # 全てキーに格納する場合
2
+
3
+
4
+
1
5
  ```php
2
6
 
3
7
  <?php
@@ -21,3 +25,45 @@
21
25
  print_r($root);
22
26
 
23
27
  ```
28
+
29
+
30
+
31
+ # 最後だけその前のキーの値に格納する場合
32
+
33
+
34
+
35
+ ```php
36
+
37
+ <?php
38
+
39
+ $str = 'あ,い,う,え,お';
40
+
41
+ $chars = explode(',', $str);
42
+
43
+ $root = [];
44
+
45
+ $current = &$root;
46
+
47
+ foreach (array_slice($chars, 0, -1) as $char) {
48
+
49
+ $current[$char] = [];
50
+
51
+ $current = &$current[$char];
52
+
53
+ }
54
+
55
+ foreach (array_slice($chars, -1) as $char) {
56
+
57
+ $current = $char;
58
+
59
+ }
60
+
61
+ unset($current);
62
+
63
+ print_r($root);
64
+
65
+ ```
66
+
67
+
68
+
69
+ ただし,後者のようなデータ構造は設計が破綻しているので,前者を採用することをおすすめします.一貫性がありません.