回答編集履歴
2
ソースコードの細部を修正
test
CHANGED
@@ -30,11 +30,11 @@
|
|
30
30
|
|
31
31
|
'01' => array('011', '0123', '0124', '0125'・・・),
|
32
32
|
|
33
|
-
'02' => array('022', '022
|
33
|
+
'02' => array('0220', '0223', '0224'・・・),
|
34
34
|
|
35
35
|
'03' => array('03'),
|
36
36
|
|
37
|
-
'04' => array('0422', '042', '042
|
37
|
+
'04' => array('0422', '0428', '042'・・・
|
38
38
|
|
39
39
|
・・・
|
40
40
|
|
1
ソースコードを修正
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
|
```
|