PHP字符串操作

时间:2009-12-09 14:23:08

标签: php text-manipulation

我正在阅读格式为

的文本文件

手机号码(标签)文字(换行符) (换行)

或更具体地说

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之前将这些值存储在数组中,还是应该立即存储它?

6 个答案:

答案 0 :(得分:6)

逐行读取文件,拆分选项卡车上的每一行,然后使用适合您的数据库平台的SQL将其放入数据库中。

你遇到了哪些问题?

答案 1 :(得分: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
    }
}

答案 2 :(得分:3)

使用explode函数,每行包含一个制表符(\t)分隔符。

答案 3 :(得分:1)

您可以使用正则表达式来分解字符串,然后使用SQL将它们输入到数据库中。

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

会将电话号码作为第一个捕获的组返回,将剩余的文本作为第二个捕获组返回。

答案 4 :(得分: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.
  }
}

答案 5 :(得分:1)

我认为你最好使用strpos功能,以防文本部分中有标签。

$lines = file( $filename );

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

如果文件特别大,请将file功能和foreach替换为fopenfgetssee example)。