Как взорвать эту строку в массив, как это? - PullRequest
2 голосов
/ 06 июля 2011

Я пытаюсь разбить эту строку,

AFRIKAANS = af
ALBANIAN = sq
AMHARIC = am
ARABIC = ar
ARMENIAN = hy
AZERBAIJANI = az
BASQUE = eu
BELARUSIAN = be
BENGALI = bn
BIHARI = bh
BULGARIAN = bg
BURMESE = my
CATALAN = ca
CHEROKEE = chr
CHINESE = zh

В такой массив

$lang_codes['chinese'] = "zh";

Таким образом, название языка - это ключ, а значение - код языка. Это действительно просто, но я просто не могу разобраться с этим. Я слишком долго тормозил от программирования, очевидно ...

Я пытался взорваться в \n, затем с помощью foreach, снова взорваться в =, но я не могу собрать его так, как хочу.

Ответы [ 4 ]

4 голосов
/ 06 июля 2011

Я пытался взорваться в \ n, а затем использовать foreach, снова взорваться в "="

Я думаю, что это совершенно правильный подход.

$lines = explode("\n", $langs);
$lang_codes = array();

foreach ($lines as $line) {
    list ($lang, $code) = explode(" = ", $line, 2);
    $lang_codes[$lang] = $code;
}

Если вы хотите, чтобы язык был в нижнем регистре, как в вашем примере ($lang_codes['chinese']), вам нужно позвонить strtolower:

$lang_codes[strtolower($lang)] = $code;

См. PHPруководство для более подробной информации об этих функциях:

2 голосов
/ 06 июля 2011

Хотя ответы с разнесением технически верны, я сразу подумал, что вы пытаетесь проанализировать INI-файл. Вот более простой подход, который делает именно то, что вы хотите.

<?php
$string = "AFRIKAANS = af
ALBANIAN = sq
AMHARIC = am
ARABIC = ar
ARMENIAN = hy
AZERBAIJANI = az
BASQUE = eu
BELARUSIAN = be
BENGALI = bn
BIHARI = bh
BULGARIAN = bg
BURMESE = my
CATALAN = ca
CHEROKEE = chr
CHINESE = zh";

$array = array_change_key_case( parse_ini_string( $string ) );

echo $array['chinese'];
0 голосов
/ 06 июля 2011
<code><?php 
$str ="AFRIKAANS = af
ALBANIAN = sq
AMHARIC = am
ARABIC = ar
ARMENIAN = hy
AZERBAIJANI = az
BASQUE = eu
BELARUSIAN = be
BENGALI = bn
BIHARI = bh
BULGARIAN = bg
BURMESE = my
CATALAN = ca
CHEROKEE = chr
CHINESE = zh";

$arr  = explode("\n", $str);
$lang_mapped = array();

foreach ($arr as $line) {
    list ($lang, $code) = explode(" = ", $line, 2);
    $lang_mapped[$lang] = $code;
}
$arr = explode("\n", $str); 
echo "<pre>";
print_r($lang_mapped);
echo "
";?>
0 голосов
/ 06 июля 2011

Может, ты и сделаешь:

$array = explode("\n" , $string);
$finalArray =array();
$foreach ($array as $value){
      $array2 = explode( ' = ', $value);
      $finalArray[$array2[1]] =  $array2[0];

}
...