回答編集履歴

2

ソースコードの細部を修正

2017/02/21 07:00

投稿

kunai
kunai

スコア5405

test CHANGED
@@ -30,11 +30,11 @@
30
30
 
31
31
  '01' => array('011', '0123', '0124', '0125'・・・),
32
32
 
33
- '02' => array('022', '0220', '0223'・・・),
33
+ '02' => array('0220', '0223', '0224'・・・),
34
34
 
35
35
  '03' => array('03'),
36
36
 
37
- '04' => array('0422', '042', '0428'・・・
37
+ '04' => array('0422', '0428', '042'・・・
38
38
 
39
39
  ・・・
40
40
 

1

ソースコードを修正

2017/02/21 07:00

投稿

kunai
kunai

スコア5405

test CHANGED
@@ -22,7 +22,9 @@
22
22
 
23
23
 
24
24
 
25
- ```
25
+ ```PHP
26
+
27
+ //市外局番を配列で管理。あとで照合するときに全件で照合させると効率が悪いので、先頭2桁をキーにして分割(DBから取得でも良い)
26
28
 
27
29
  $shigaiKyokubanList = array(
28
30
 
@@ -46,24 +48,30 @@
46
48
 
47
49
 
48
50
 
51
+ //電話番号リストをループ
52
+
49
53
  foreach($telList as $tel) {
54
+
55
+ //市外局番の配列のうち、先頭2桁をキーとして2階層目の配列を取り出し、ループ
50
56
 
51
57
  foreach($shigaiKyokubanList[substr($tel, 0, 2)] as $shigaiKyokuban) {
52
58
 
53
-
59
+ //候補の市外局番から始まる前提で正規表現マッチング
54
60
 
55
- if(!preg_match('/^('.$shigaiKyokuban.')([0-9]+)([0-9]{4})/', $matches) || count($matches) < 4) {
61
+ if(!preg_match('/^('.$shigaiKyokuban.')([0-9]+)([0-9]{4})$/', $matches) || count($matches) < 4) {
56
62
 
57
- //エラー処理
63
+ //マッチしない場合、次の市外局番と照合する
64
+
65
+ continue;
58
66
 
59
67
  } else {
68
+
69
+ //マッチした場合、tel1, tel2, tel3をキーとする配列に格納する
60
70
 
61
71
  $separatedTelList[] = array('tel1' => $matches[1], 'tel2' => $matches[2], 'tel3' => $matches[3]);
62
72
 
63
73
  }
64
74
 
65
-
66
-
67
75
  }
68
76
 
69
77
  ```