2012-03-09 5 views
0

$ code私はちょうど言語配列、すべてのコードを配列に配列し、最終的にはすべての家族から家族の配列にすべての言語をしたい、どのように私はPHPでこれを行うことができますか?私はDOMを使用しようとしましたが、それ以外の方法はありません、事前に感謝します。分離された文字列を配列にしますか?

<?php 
$codes = '<pre> 
LANGUAGE  CODE  LANGUAGE FAMILY 

AFAR   AA  HAMITIC 
ABKHAZIAN  AB  IBERO-CAUCASIAN 
AFRIKAANS  AF  GERMANIC 
AMHARIC   AM  SEMITIC 
ARABIC   AR  SEMITIC 
ASSAMESE  AS  INDIAN 
AYMARA   AY  AMERINDIAN 
AZERBAIJANI  AZ  TURKIC/ALTAIC 
BASHKIR   BA  TURKIC/ALTAIC 
BYELORUSSIAN BE  SLAVIC 
BULGARIAN  BG  SLAVIC 
BIHARI   BH  INDIAN 
BISLAMA   BI  [not given] 
BENGALI;BANGLA BN  INDIAN 
TIBETAN   BO  ASIAN 
BRETON   BR  CELTIC 
CATALAN   CA  ROMANCE 
CORSICAN  CO  ROMANCE 
CZECH   CS  SLAVIC 
WELSH   CY  CELTIC 
DANISH   DA  GERMANIC 
GERMAN   DE  GERMANIC 
BHUTANI   DZ  ASIAN 
GREEK   EL  LATIN/GREEK 
ENGLISH   EN  GERMANIC 
ESPERANTO  EO  INTERNATIONAL AUX. 
SPANISH   ES  ROMANCE 
ESTONIAN  ET  FINNO-UGRIC 
BASQUE   EU  BASQUE 
PERSIAN (farsi) FA  IRANIAN 
FINNISH   FI  FINNO-UGRIC 
FIJI   FJ  OCEANIC/INDONESIAN 
FAROESE   FO  GERMANIC 
FRENCH   FR  ROMANCE 
FRISIAN   FY  GERMANIC 
IRISH   GA  CELTIC 
SCOTS GAELIC GD  CELTIC 
GALICIAN  GL  ROMANCE 
GUARANI   GN  AMERINDIAN 
GUJARATI  GU  INDIAN 
HAUSA   HA  NEGRO-AFRICAN 
HEBREW   HE  SEMITIC [*Changed 1989 from original ISO 639:1988, IW] 
HINDI   HI  INDIAN 
CROATIAN  HR  SLAVIC 
HUNGARIAN  HU  FINNO-UGRIC 
ARMENIAN  HY  INDO-EUROPEAN (OTHER) 
INTERLINGUA  IA  INTERNATIONAL AUX. 
INTERLINGUE  IE  INTERNATIONAL AUX. 
INUPIAK   IK  ESKIMO 
INDONESIAN  ID  OCEANIC/INDONESIAN [*Changed 1989 from original ISO 639:1988, IN] 
ICELANDIC  IS  GERMANIC 
ITALIAN   IT  ROMANCE 
INUKTITUT  IU  [  ] 
JAPANESE  JA  ASIAN 
JAVANESE  JV  OCEANIC/INDONESIAN 
GEORGIAN  KA  IBERO-CAUCASIAN 
KAZAKH   KK  TURKIC/ALTAIC 
GREENLANDIC  KL  ESKIMO 
CAMBODIAN  KM  ASIAN 
KANNADA   KN  DRAVIDIAN 
KOREAN   KO  ASIAN 
KASHMIRI  KS  INDIAN 
KURDISH   KU  IRANIAN 
KIRGHIZ   KY  TURKIC/ALTAIC 
LATIN   LA  LATIN/GREEK 
LINGALA   LN  NEGRO-AFRICAN 
LAOTHIAN  LO  ASIAN 
LITHUANIAN  LT  BALTIC 
LATVIAN;LETTISH LV  BALTIC 
MALAGASY  MG  OCEANIC/INDONESIAN 
MAORI   MI  OCEANIC/INDONESIAN 
MACEDONIAN  MK  SLAVIC 
MALAYALAM  ML  DRAVIDIAN 
MONGOLIAN  MN  [not given] 
MOLDAVIAN  MO  ROMANCE 
MARATHI   MR  INDIAN 
MALAY   MS  OCEANIC/INDONESIAN 
MALTESE   MT  SEMITIC 
BURMESE   MY  ASIAN 
NAURU   NA  [not given] 
NEPALI   NE  INDIAN 
DUTCH   NL  GERMANIC 
NORWEGIAN  NO  GERMANIC 
OCCITAN   OC  ROMANCE 
AFAN (OROMO) OM  HAMITIC 
ORIYA   OR  INDIAN 
PUNJABI   PA  INDIAN 
POLISH   PL  SLAVIC 
PASHTO;PUSHTO PS  IRANIAN 
PORTUGUESE  PT  ROMANCE 
QUECHUA   QU  AMERINDIAN 
RHAETO-ROMANCE RM  ROMANCE 
KURUNDI   RN  NEGRO-AFRICAN 
ROMANIAN  RO  ROMANCE 
RUSSIAN   RU  SLAVIC 
KINYARWANDA  RW  NEGRO-AFRICAN 
SANSKRIT  SA  INDIAN 
SINDHI   SD  INDIAN 
SANGHO   SG  NEGRO-AFRICAN 
SERBO-CROATIAN SH  SLAVIC 
SINGHALESE  SI  INDIAN 
SLOVAK   SK  SLAVIC 
SLOVENIAN  SL  SLAVIC 
SAMOAN   SM  OCEANIC/INDONESIAN 
SHONA   SN  NEGRO-AFRICAN 
SOMALI   SO  HAMITIC 
ALBANIAN  SQ  INDO-EUROPEAN (OTHER) 
SERBIAN   SR  SLAVIC 
SISWATI   SS  NEGRO-AFRICAN 
SESOTHO   ST  NEGRO-AFRICAN 
SUNDANESE  SU  OCEANIC/INDONESIAN 
SWEDISH   SV  GERMANIC 
SWAHILI   SW  NEGRO-AFRICAN 
TAMIL   TA  DRAVIDIAN 
TELUGU   TE  DRAVIDIAN 
TAJIK   TG  IRANIAN 
THAI   TH  ASIAN 
TIGRINYA  TI  SEMITIC 
TURKMEN   TK  TURKIC/ALTAIC 
TAGALOG   TL  OCEANIC/INDONESIAN 
SETSWANA  TN  NEGRO-AFRICAN 
TONGA   TO  OCEANIC/INDONESIAN 
TURKISH   TR  TURKIC/ALTAIC 
TSONGA   TS  NEGRO-AFRICAN 
TATAR   TT  TURKIC/ALTAIC 
TWI    TW  NEGRO-AFRICAN 
UIGUR   UG  [  ] 
UKRAINIAN  UK  SLAVIC 
URDU   UR  INDIAN 
UZBEK   UZ  TURKIC/ALTAIC 
VIETNAMESE  VI  ASIAN 
VOLAPUK   VO  INTERNATIONAL AUX. 
WOLOF   WO  NEGRO-AFRICAN 
XHOSA   XH  NEGRO-AFRICAN 
YIDDISH   YI  GERMANIC [*Changed 1989 from original ISO 639:1988, JI] 
YORUBA   YO  NEGRO-AFRICAN 
ZHUANG   ZA  [  ] 
CHINESE   ZH  ASIAN 
ZULU   ZU  NEGRO-AFRICAN 
</pre>'; 

$doc= new DOMDocument(); 
$doc->loadHTML($codes); 

$xmlL = simplexml_import_dom($doc); 
$pathL = $xmlL->xpath('//pre'); 
print_r($pathL); 

?> 
+0

このコードがどこから来ても、それを構築した関数をやり直すことをおすすめします。私は格納された配列をHTMLに変換することをお勧めします。 – Joseph

+1

http://www.php.net/manual/en/function.str-getcsv.phpを見てください。 –

+0

[不規則なスペースとタブを持つファイルが列方向に分割/爆発する可能性があります](http://stackoverflow.com)/q/8349551/90527)、[Split String into Parts PHP](http://stackoverflow.com/q/715747/90527)、[配列内の値に基づく分割文字列](http://stackoverflow.com/ q/891204/90527)および多くの他多くのものが含まれる。 – outis

答えて

1

欲しい:

$langs_ar = array(); 
$codes_ar = array(); 
$families_ar = array(); 

foreach(preg_split('/[\r\n]+/', $codes) as $line) 
{ 
    if (preg_match('/^(\S+\s*\S+)\s+(\S{2})\s+(\S.*\S)\s*$/', $line, $matches)) 
    { 
     $langs_ar[] = $matches[1]; 
     $codes_ar[] = $matches[2]; 
     $families_ar[] = $matches[3]; 
    }                                    
} 

ああ、代わりに3列の、私の代わりに3つのフィールドのハッシュを保存するアレイを1つお勧めします。それは3つのプロパティlang、code、およびfamilyで独自のオブジェクトを作成することができます。

編集:同じことを行うにははるかに短い方法はこれです:

  • 0:

    preg_match_all('/^(\S+\s*\S+)\s+(\S{2})\s+(\S.*\S)\s*$/m', $codes, $matches, PREG_SET_ORDER); 
    var_dump($matches); 
    

    $マッチは今のインデックスは、すべての行のための「オブジェクト」の配列ですフルライン

  • 1言語
  • 2であるコード
  • 3であるが、家族
  • です

あなたがしたいことを何でもするためにそれを繰り返すだけです。

+0

はい、それはうまく動作します –

+0

あなたはこれが何をしているかを説明できますか?(+ S +\s*\S+)\s+(\S{2})\s+(\S.*\S)\s*$/ –

+0

これは単なる正規表現です。ここでphp docを見てください:http://www.php.net/manual/en/book.pcre.php –

1

私はあなたがPHPのexplode関数を見てみるべきだと思います。

これで、最初に "\ n"文字で区切って(行を区切る)、最初の配列を取得できます。 その後、各行について、データを分割するタブを持っていると仮定して、\ tで爆発させることができます。3つの別々のエントリを持つ配列を取得し、それぞれの配列を必要な配列に押します。

のようなもの:あなたは発電機を固定し、より良い運を持っていると思いますが、あなたはこの1つのリストで立ち往生している場合、下記の方法であなたにそれを解析する必要がありますので、リストは明らかに、生成され

$codes_array = array(); 
foreach($line as explode("\n",$codes)){ 
    $codes_array[] = explode("\t",$line); 
} 
+1

*ああ、複数行の文字列定義には二重引用符を使用してください。*それはなぜですか? – Yoshi

+0

これは動作していても以前は標準でサポートされていなかったためです。 – kappa

+0

何ですか?参照のためにリンクを共有することができます。過去8年間PHPで作業していたので、これについて聞いたことはありません。 – Yoshi

関連する問題