teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

加筆修正

2018/06/01 12:48

投稿

退会済みユーザー
answer CHANGED
@@ -70,4 +70,9 @@
70
70
 
71
71
  $str = to_kana($str, $romaji, $kana);
72
72
  echo $str;
73
- ```
73
+ ```
74
+
75
+ もしもこの先ローマ字領域全体に拡張するとなると、
76
+ 'pya'みたいな3文字使うものを配列の先の方に置いて、
77
+ 'n'はあ行らといっしょでいいかもしれません。
78
+ (「ん」をnnとするかnとするか、kaniを「かに」にせず「かんい」にするためのローマ字の工夫とか、検討事項はまだあるけども。)

3

加筆修正

2018/06/01 12:48

投稿

退会済みユーザー
answer CHANGED
@@ -34,4 +34,40 @@
34
34
  echo $str;
35
35
  ```
36
36
  《実行結果》
37
- ![イメージ説明](e222f7a8254dd0ac901d095cb18ca6b3.png)
37
+ ![イメージ説明](e222f7a8254dd0ac901d095cb18ca6b3.png)
38
+
39
+ 正規表現パターンを駆使しないので、
40
+ preg_replace()でなくstr_replace()の方が少しでも処理が早くなる。
41
+
42
+ ```php
43
+ <?php
44
+
45
+ function to_kana($str, $romaji, $kana){
46
+
47
+ //$patterns = [];
48
+ //foreach($romaji as $value){
49
+ // $patterns[] = '/' . $value . '/';
50
+ //}
51
+
52
+ //$str = preg_replace($patterns, $kana, $str);
53
+ $str = str_replace($romaji, $kana, $str);
54
+ return $str;
55
+
56
+ }
57
+
58
+ $kana = [
59
+ 'か', 'き', 'く', 'け', 'こ',
60
+ 'あ', 'い', 'う', 'え', 'お',
61
+ ];
62
+
63
+ $romaji = [
64
+ 'ka', 'ki', 'ku', 'ke', 'ko',
65
+ 'a', 'i', 'u', 'e', 'o',
66
+ ];
67
+
68
+
69
+ $str = "aki"; // あき
70
+
71
+ $str = to_kana($str, $romaji, $kana);
72
+ echo $str;
73
+ ```

2

加筆修正

2018/06/01 10:41

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,7 @@
1
1
  なんか間違った回答を投稿した気がするけど、見直しました。
2
+ あ行の置き換えを最後に回すしか無いと考えます。
3
+ kaのaを先に置き換えてしまうとkなど子音のみ残ってしまうのは当たり前です。
4
+
2
5
  ```php
3
6
  <?php
4
7
 

1

見直し

2018/06/01 10:17

投稿

退会済みユーザー
answer CHANGED
@@ -1,28 +1,27 @@
1
- str_replace()で十分案件
1
+ んか間違った回答を投稿した気がするけど、見直しました
2
2
  ```php
3
3
  <?php
4
4
 
5
5
  function to_kana($str, $romaji, $kana){
6
6
 
7
7
  $patterns = [];
8
- //foreach($romaji as $value){
8
+ foreach($romaji as $value){
9
- // $patterns[] = '/' . $value . '/';
9
+ $patterns[] = '/' . $value . '/';
10
- //}
10
+ }
11
11
 
12
- //$str = preg_replace($patterns, $kana, $str);
13
- $str = str_replace($patterns, $kana, $str);
12
+ $str = preg_replace($patterns, $kana, $str);
14
13
  return $str;
15
14
 
16
15
  }
17
16
 
18
17
  $kana = [
19
- 'あ', 'い', 'う', 'え', 'お',
20
18
  'か', 'き', 'く', 'け', 'こ',
19
+ 'あ', 'い', 'う', 'え', 'お', // あ行は最後!
21
20
  ];
22
21
 
23
22
  $romaji = [
24
- 'a', 'i', 'u', 'e', 'o',
25
23
  'ka', 'ki', 'ku', 'ke', 'ko',
24
+ 'a', 'i', 'u', 'e', 'o', // あ行は最後!
26
25
  ];
27
26
 
28
27
 
@@ -32,4 +31,4 @@
32
31
  echo $str;
33
32
  ```
34
33
  《実行結果》
35
- ![実行結果](9e5ca3fe466191540af9a555aa3fe92a.png)
34
+ ![イメージ説明](e222f7a8254dd0ac901d095cb18ca6b3.png)