2016-11-23 256 views
2

我目前正在使用正則表達式查找電話號碼的字符串上運行preg_match_all。當它找到匹配時,它會記錄字符串中的偏移位置。preg_match_all多維數組輸出循環? PHP

preg_match_all示例:

preg_match_all('/\b\/?\d?[-.]?\s?\(?\d{3}\)?\s?[-.]?\d{3}[-.]?\d{4}\b/', $string, $matches, PREG_OFFSET_CAPTURE); 

使用的print_r

echo print_r($matches, true).BR; 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => 666.666.6666 
        [1] => 1190 
       ) 

      [1] => Array 
       (
        [0] => 555-555-5555 
        [1] => 1206 
       ) 

     ) 

) 

問題:如何循環搜索並回顯數字和偏移位置?

+0

你能提供您輸入的字符串? –

+0

我正在解析的字符串是電子郵件正文內容,並且太長,無法在此處發佈,並且是私人電子郵件。所有的匹配和這樣的都很好,我只需要知道如何循環訪問上面示例中找到的數據。這樣我可以將數字和偏移位置都存儲到變量或數據庫中(如果需要的話)。 – Meta

回答

1

你可以使用一個foreach循環:

foreach ($matches[0] as $match) { // use first array item to loop through since the matches are in its sub-array 
    echo "Number = " . $match[0] . " | Offset = " . $match[1] . "\r\n"; 
} 

輸出:

Number = 666.666.6666 | Offset = 1190 
Number = 555.555.5555 | Offset = 1206 
+0

我已經在我的代碼中完成了foreach循環,但顯然,我的失敗並不是專門針對$ match [0]&$ match [1] - 謝謝! – Meta

+0

不客氣。很高興幫助。 – JazZ

+0

@Meta你介意我問你爲什麼沒有正確定位它們?您顯示了'print_r()'輸出,它清楚地標識了它們。作爲一個在這裏花費大量時間回答新手問題的人,我想知道當你能夠在眼前看到這些東西時,讓這樣的事情發生的心理障礙是什麼。 – Barmar