Php ile veri ayrıştırma ve MySQL veritabanı saklayarak ile sorun

2 Cevap php

Sorry for duplicating this question, but here I tried to explain it in more details. I need to parse the data from certain file and store it to database (MySQL). This is how the data is displayed in the file:

戚谊 
戚誼 
    [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.

Birinci ve ikinci hat aynı karakteri temsil eden, ancak ilk satırı basitleştirilmiş ve ikinci satır geleneksel bir karakterdir. Ben buna göre ch_simplified ve ch_trad sütununa bunları saklamak gerekir.

[M1] ile başlar Üçüncü satır, bir transkripsiyon (pinyin) olduğunu ileri hattı ([m2] ile başlar) karakteri bir çevirisidir. Karakterinin ikinci çevirisi de var, bunu farklı transkripsiyon vardır fark edebilirsiniz.

Bir ayrı bir sütun (transcription) (bazen aynı karakter için en fazla 2 uyarlamaları vardır) her ikisi de transkripsiyonları depolamak ve daha sonra bir sütun translation tüm çeviri kısmını saklamak gerekir.

Ve mysql db de tablo şöyle:

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]

Sorun php kullanarak bu verileri ayrıştırmak nasıl bilmiyorum. Ben başlamak için çalıştı

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

ve ben ilk karakteri ve ikinci karakter (戚 谊 ve 三 州府) arasında veri ayırmak zorunda aşamada sıkışmış.

Herhangi bir yardım büyük mutluluk duyacağız!

P.S. Böyle uzun bir metin ve kafa karıştırıcı açıklama için özür dilerim.

2 Cevap

() Çağrısı satır karakteri olacağını veri alanları ayrı satırlarda, bu yüzden Phil patlayabilir. Yani temel veri alanı edinimi bu gibi bir şeydir:

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

}

İşte, ben yeni bir rekor (a) başlangıç, ya da basitleştirilmiş ve trad karakter (b) kimlik tanımlamak için teşebbüs değil. Bu sorunlar muhtemelen karakter alan kimlik sayarak ele - İlki basitleştirilmiş, ikinci trad, ilk olarak bir süre yeni bir alanı belirtir için - ama bu sizin işiniz.

Ne de non-ASCII karakter kümesine ilgili herhangi bir sorunları değerlendirilmiştir. Bunu şeyler üstüne varsayalım.

I have ([b] etiketleri gibi) sunum biçimlendirme gelen içeriği ayırmak için fırsat alınır. Bu, bu semantik doğru verilerden ayrı tutmak için sadece iyi bir uygulamadır.

Sen EXPLODE() kullanabilir ve boşluk ya da herhangi başka bir karakter kırılabilir