回答編集履歴
2
ソースコードの細部を修正
answer
CHANGED
@@ -14,9 +14,9 @@
|
|
14
14
|
//市外局番を配列で管理。あとで照合するときに全件で照合させると効率が悪いので、先頭2桁をキーにして分割(DBから取得でも良い)
|
15
15
|
$shigaiKyokubanList = array(
|
16
16
|
'01' => array('011', '0123', '0124', '0125'・・・),
|
17
|
-
'02' => array('
|
17
|
+
'02' => array('0220', '0223', '0224'・・・),
|
18
18
|
'03' => array('03'),
|
19
|
-
'04' => array('0422', '
|
19
|
+
'04' => array('0422', '0428', '042'・・・
|
20
20
|
・・・
|
21
21
|
);
|
22
22
|
$telList = getTelList(); //ここで、DBから電話番号の全件をselectしてきたモノとします。
|
1
ソースコードを修正
answer
CHANGED
@@ -10,7 +10,8 @@
|
|
10
10
|
|
11
11
|
以下、PHPでやった場合の処理となります。
|
12
12
|
|
13
|
-
```
|
13
|
+
```PHP
|
14
|
+
//市外局番を配列で管理。あとで照合するときに全件で照合させると効率が悪いので、先頭2桁をキーにして分割(DBから取得でも良い)
|
14
15
|
$shigaiKyokubanList = array(
|
15
16
|
'01' => array('011', '0123', '0124', '0125'・・・),
|
16
17
|
'02' => array('022', '0220', '0223'・・・),
|
@@ -22,14 +23,17 @@
|
|
22
23
|
|
23
24
|
$separatedTelList = array();//tel1, tel2, tel3に分割された電話番号を格納する配列
|
24
25
|
|
26
|
+
//電話番号リストをループ
|
25
27
|
foreach($telList as $tel) {
|
28
|
+
//市外局番の配列のうち、先頭2桁をキーとして2階層目の配列を取り出し、ループ
|
26
29
|
foreach($shigaiKyokubanList[substr($tel, 0, 2)] as $shigaiKyokuban) {
|
27
|
-
|
30
|
+
//候補の市外局番から始まる前提で正規表現マッチング
|
28
|
-
|
31
|
+
if(!preg_match('/^('.$shigaiKyokuban.')([0-9]+)([0-9]{4})$/', $matches) || count($matches) < 4) {
|
29
|
-
|
32
|
+
//マッチしない場合、次の市外局番と照合する
|
33
|
+
continue;
|
30
34
|
} else {
|
35
|
+
//マッチした場合、tel1, tel2, tel3をキーとする配列に格納する
|
31
36
|
$separatedTelList[] = array('tel1' => $matches[1], 'tel2' => $matches[2], 'tel3' => $matches[3]);
|
32
37
|
}
|
33
|
-
|
34
38
|
}
|
35
39
|
```
|