代码之家  ›  专栏  ›  技术社区  ›  Josh

通过php解析数据并将其存储到MySQL数据库时出现问题

  •  0
  • Josh  · 技术社区  · 16 年前

    戚谊 
    戚誼 
        [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_simplified ch_trad 相应的列。

    我们需要将两个转录(有时同一个字符有两个以上的转录)存储在单独的列中( transcription translation .

    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);
    

    2 回复  |  直到 16 年前
        1
  •  0
  •   Ewan Todd    16 年前

    您的数据字段位于单独的行上,因此Phil的explode()调用将位于换行符上。所以基本的数据字段采集是这样的:

    $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;
      }
    
    }
    

    在这里,我没有试图识别(a)新记录的开始,或(b)简化和传统字符的识别。这些问题可能通过计算字符字段标识来解决——第一个是简化的,第二个是trad,第一个表示一个新字段——但这是你的工作。

    我也没有评估与非ascii字符集有关的任何问题。我想你已经掌握了这些东西。

    一、

        2
  •  0
  •   Phill Pafford    16 年前

    你可以使用 EXPLODE() 打破空间或任何其他字符

    推荐文章