2012-03-09 2 views
0

주어진 문자열에서 $ 코드 그냥 언어 배열, 모든 코드를 배열 및 마지막으로 모든 가족 배열에 모든 언어를 갖고 싶습니다. 어떻게 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보다 저장된 배열을 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 개 필드에 대한 하나 개의 배열에 저장하는 해시를 권하고 싶습니다; 그것들은 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의 분해 기능을 살펴 봐야한다고 생각합니다.

이렇게하면 "\ n"문자로 구분하여 줄을 구분할 수 있으며 첫 번째 배열을 얻을 수 있습니다. 그런 다음 각 줄마다 \ t (데이터를 분리하는 탭이 있다고 가정), 3 개의 개별 항목이있는 배열을 얻은 다음 원하는 배열에서 각 배열을 밀어 넣을 수 있습니다.

뭔가 같은 :

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

* 아, 여러 줄 문자열 정의에 큰 따옴표를 사용하십시오. * 이유가 무엇입니까? – Yoshi

+0

현재 작동하고 있어도 이전에는 표준에 의해 지원되지 않았기 때문입니다. – kappa

+0

무엇? 참조 용으로 링크를 공유하고 싶을 수도 있습니다. 왜냐하면 지난 8 년 동안 PHP로 작업 해 본 적이 없기 때문입니다. – Yoshi

관련 문제