问题通过PHP解析数据并将其存储到MySQL数据库(Problem with parsing dat

2019-10-17 20:40发布

对不起,重复这个问题,但在这里我试图解释它的更多细节。 我需要从特定文件解析数据,并存储到数据库(MySQL的)。 这是该数据如何显示在文件:

戚谊 
戚誼 
    [m1][b]qīyì[/b][/m] 
    [m2]translation 1[/m] 
    [m1][b]qīyi[b][/m] 
    [m2]translation 2[/m] 
三州府 
    [m1][b]sānzhōufǔ[/b][/m] 
    [m2]translation of other character[/m]
etc.

所述第一和第二线表示相同的字符,而且,第一行是一个简化和第二行是一个传统的字符。 我需要存储他们ch_simplifiedch_trad相应列。

第三行,其与[M1]开始时,是一种转录(拼音),第四线(开始于[平方米])是字符的翻译。 也有字符的第二个翻译,你可以看到它有不同的转录。

我们需要存储这两个转录(有时有超过2个转录为相同的字符)在单独的列( transcription ),然后存储所有的翻译部分列translation

而在MySQL数据库表如下所示:

ID  |  ch_simplified  |  ch_trad    | transcription           |   translation               | 
--------------------------------------------------------------------------------------------- 
1.        戚谊             戚誼        [m1][b]qīyì[/b][/m];     [m1][b]qīyì[/b][/m] 
                                      [m1][b]qīyi[b][/m]       [m2]translation 1[/m] 
                                                               [m1][b]qīyi[b][/m] 
                                                               [m2]translation 2[/m] 
---------------------------------------------------------------------------------------------
2.        三州府           三州府      [m1][b]sānzhōufǔ[/b][/m]  [m1][b]sānzhōufǔ[/b][/m] 
                                                               [m2]translation of other character[/m] 

问题是我不知道如何使用PHP解析这些数据。 我试着开始

$content = file_get_contents('myfile.txt', true);

并停留在步骤,其中我必须第一字符和所述第二字符之间的数据分开(戚谊和三州府)。

任何帮助将不胜感激!

PS对不起,这么长的文字和混乱的解释。

Answer 1:

你的数据字段是在不同的行,所以菲尔的爆炸()调用将是对换行符。 所以基本的数据字段收购是这样的:

$content = file_get_contents('myfile.txt', true);

foreach(explode("\n", $content) as $line)
{
  $line = trim($line);  // remove leading white space
  // if necessary, check for empty lines here
  switch(substr($line, 0,4)) // examine first four characters
  {
    case '[m1]':
      // regular expression has some escaped characters
      preg_match('/^\[m1](.+)\[\/m]$/', $line, $matches);  
      $field = $matches[1];
      echo "pinyin: '$field'\n";
      break;

    case '[m2]':
      preg_match('/^\[m2](.+)\[\/m]$/', $line, $matches);
      $field = $matches[1];
      echo "translation: '$field'\n";
      break;

    default:
      $field = $line;  // for clarity
      echo "character: '$field'\n";
      break;
  }

}

在这里,我还没有尝试确定(一)新记录的开始,或(b)的简化和繁体字符识别。 这些问题可能是由计算字符型字段标识寻址 - 第一个被简化,第二繁体,第一一会儿表明一个新的领域 - 但这是你的工作。

我也没有评估有关非ASCII字符集的任何问题。 我认为你是对的东西上面。

采取的机会,以所述内容从表示性标记(如并[b]标记)分离。 这是一个好的做法,以保持这些语义从数据适当分开。



Answer 2:

你可以使用EXPLODE()和空格或任何其他字符突破



文章来源: Problem with parsing data via php and storing it to MySQL database