回答編集履歴

2

結局やった

2015/11/19 11:25

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -32,7 +32,9 @@
32
32
 
33
33
  ```PHP
34
34
 
35
- $word; // これが該当文字列
35
+ $word = "[A inu [B neko nyan [A tori] [AB kizi]] [B musi kabuto musi [CB taka]]]";
36
+
37
+
36
38
 
37
39
  $down_lv = 0;
38
40
 
@@ -52,7 +54,7 @@
52
54
 
53
55
  $b = explode(']', $up_word);
54
56
 
55
- foreach ($b as $b_key => $core_word) {
57
+ foreach ($b as $key => $core_word) {
56
58
 
57
59
  if ($key > 0) {
58
60
 
@@ -68,7 +70,9 @@
68
70
 
69
71
  }
70
72
 
71
- // さあ、$targetは「A ◯◯」の形式です。煮るなり焼くなり好きにしてください
73
+ $left_word = mb_substr($target, 0, mb_strpos($target, ' '));
74
+
75
+ $right_word = mb_substr($target, mb_strpos($target, ' ') + 1);
72
76
 
73
77
  $results[] = array(
74
78
 
@@ -84,11 +88,35 @@
84
88
 
85
89
  }
86
90
 
87
- ```
88
91
 
89
92
 
93
+ // ここから出力して確認
90
94
 
95
+ foreach ($results as $seeds) {
96
+
97
+ echo "{$seeds[0]}, {$seeds[1]}, {$seeds[2]}\n";
98
+
99
+ }
100
+
101
+ /*
102
+
103
+ rank, type, str
104
+
105
+ 1, A, inu
106
+
107
+ 2, B, neko nyan
108
+
109
+ 3, A, tori
110
+
111
+ 3, AB, kizi
112
+
91
- 全部は作ってないので未確認です、試してみて下さい。
113
+ 2, B, musi kabuto musi
114
+
115
+ 3, CB, taka
116
+
117
+ */
118
+
119
+ ```
92
120
 
93
121
 
94
122
 

1

考慮漏れ対応

2015/11/19 11:25

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -34,13 +34,13 @@
34
34
 
35
35
  $word; // これが該当文字列
36
36
 
37
- $a = explode('[', $word);
38
-
39
37
  $down_lv = 0;
40
38
 
41
39
  $results = array();
42
40
 
43
41
  $results[] = array("rank", "type", "str");
42
+
43
+ $a = explode('[', $word);
44
44
 
45
45
  foreach ($a as $base_lv => $up_word) {
46
46
 
@@ -56,11 +56,17 @@
56
56
 
57
57
  if ($key > 0) {
58
58
 
59
- $down_lv++;
59
+ $down_lv++; // 永続的にレベルダウンするので表示レベルが上がり続ける事はありません。
60
60
 
61
61
  }
62
62
 
63
63
  $target = trim($core_word);
64
+
65
+ if ($target === "") {
66
+
67
+ continue;
68
+
69
+ }
64
70
 
65
71
  // さあ、$targetは「A ◯◯」の形式です。煮るなり焼くなり好きにしてください
66
72
 
@@ -83,3 +89,13 @@
83
89
 
84
90
 
85
91
  全部は作ってないので未確認です、試してみて下さい。
92
+
93
+
94
+
95
+ ちなみにこの作戦だと、
96
+
97
+ 全ての文字列を配列の中にぶち込んで作業するのでまぁまぁ富豪的で重いです。
98
+
99
+ 本気でやるならmb_substrやmb_strpos、mb_strlenだけで最後までやり切るのが一番速いでしょうね。
100
+
101
+ やりたくは無いですが、回答者の回答の中で納得の速度が得られなければ試してみてください。