2009-12-09 38 views
1

我讀一個文本的格式PHP字符串操作

電話號碼(標籤)文本(換行符) (換行符)

或者更具體地說

4799999999 Hey! You owe us $576.53. Pay up to account no. 9760.00.12345, ID: 201561438. 

4798888888 Hey! You owe us $199. Pay up to account no. 9760.05.12345, KID: 201565173. 

4797777777 Hey! You owe us... and so on. 

我想把它存儲在一個SQL數據庫中,所以我需要在電話號碼和文本中分解它。

如何將字符串分割成PHP對任何想法?在保存到SQL之前,我應該將這些值存儲在數組中,還是應該立即將其存儲?

+0

哇,你們快速回復!我在這裏很難跟進:) – Frode

回答

6

逐行讀取文件中的行,拆分的選項卡每個車線,然後用合適的SQL你的數據庫平臺,將其放入數據庫。

哪個部位有問題?

+0

這是整個打破字符串,這是我現在主要關心的問題。 – Frode

+1

+1爲簡單起見。 OP:使用'explode(「\ t」,$ line,2)'將行分割爲* first * tab字符串。 – jensgram

1

你可以使用正則表達式來分手的字符串,然後將它們投入使用SQL數據庫。

^([0-9]{10})(.*) 

將帶回電話號碼作爲第一個捕獲組,其餘文本作爲第二個捕獲組。

+0

恩,是的。我有點想你可以用正則表達式來做到這一點,但我不知道它是如何工作的,真的......我在PHP中很新,並且對正則表達式一無所知,除了關於可以使用什麼的一些想法爲了。 – Frode

+0

看看其他的解決方案,你可能更適合'爆炸'。在這裏使用RegEx可能會使事情過度複雜 - 我的糟糕! :P –

+0

總有一些正則表達式的空間。 –

3

使用explode功能,每行一個標籤(\t)定界符。

4
$data = file_get_contents ($file); // Assuming $file holds path to file 
if ($data) { 
    $lines = explode("\n\n", $data); 
    foreach ($lines as $line) { 
     list ($phone, $message) = explode("\t", $line, 2); 
     // do whatever you need with it 
    } 
} 
+0

考慮將'2'作爲第三個參數傳遞給'explode'。 – jensgram

+0

謝謝,添加了限制。 –

+0

好的,我現在一直在嘗試這種方式,它將字符串分割成第一個電話號碼,然後是文件的其餘部分。由於文件字符編碼,是否有可能換行符不同? – Frode

1

假設該文件不是很大,你可以只讀取行到一個數組與file()和遍歷他們像這樣:

$lines = file($filename); 

foreach($lines as $line) { 
    $line_arr = explode("\t", $line, 2); 

    if(!empty($line_arr)) { 
    // $line_arr[0] will be the phone number and 
    // $line_arr[1] will be the text; insert them into your database 
    // however you please. 
    } 
} 
1

我想你會更好用strpos函數,以防文本部分中有選項卡。

$lines = file($filename); 

foreach ($lines as $line) 
{ 
    $tab = strpos($line, "\t"); 
    $num = substr($line, 0, $tab); 
    $text = substr($line, $tab); 
} 

更換file功能和foreachfopenfgetssee example)如果該文件是特別大。

+0

explode()的第三個參數是$ limit,這可以讓您免於擔心第一個選項卡後的選項卡。 –

+0

看起來我今天學到了東西,謝謝喬丹。其實我會對看哪個有更好的表現感興趣(雖然它會是相當小的差異TBH) – DisgruntledGoat