2009-12-09 35 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