2

複数の言語で書かれた製品のリストに取り組んでいます。次のような言語を表示する各製品の配列があります。

Array ( [0] => DA [1] => DE [2] => EN [3] => ES [4] => FI [5] => FR [6] => IT [7] => JA [8] => KO [9] => NL [10] => NO [11] => PL [12] => PT [13] => RU [14] => SV [15] => ZH )

これらの個々のコードを言語名に置き換える必要があります (つまり、EN => 英語)。次のコードがあり、通常の文字列では問題なく動作しますが、この配列では動作しません。何かご意見は?

    $trans = array(
        "EN" => "English", 
        "ZH" => "Chinese", 
        "DA" => "Danish",
        "NL" => "Dutch", 
        "FI" => "Finnish", 
        "FR" => "French",
        "DE" => "German", 
        "IT" => "Italian", 
        "JA" => "Japanese",
        "KO" => "Korean", 
        "NO" => "Norwegian", 
        "PL" => "Polish",
        "PT" => "Portuguese", 
        "RU" => "Russian", 
        "ES" => "Spanish",
        "SV" => "Swedish", 
    );

    echo strtr($langcodes, $trans);

$langcodes は配列値を保持します。

4

4 に答える 4

2

それが機能することの証明:http://codepad.org/PR5pPqcX

@Davidは私の答えをチェックしてください。下記参照。私が正しければ、ポイントを獲得できるようにクレジットしてください。ポイントは私がより多くの質問に答える動機を与えます。

$language_codes = array(0 => 'DA', 1 => 'DE', 2 => 'EN', 3 => 'ES', 4 => 'FI', 5 => 'FR', 6 => 'IT', 7 => 'JA', 8 => 'KO', 9 => 'NL', 10 => 'NO', 11 => 'PL', 12 => PT, 13 => 'RU', 14 => 'SV', 15 => 'ZH' );

$trans = array(
    "EN" => "English", 
    "ZH" => "Chinese", 
    "DA" => "Danish",
    "NL" => "Dutch", 
    "FI" => "Finnish", 
    "FR" => "French",
    "DE" => "German", 
    "IT" => "Italian", 
    "JA" => "Japanese",
    "KO" => "Korean", 
    "NO" => "Norwegian", 
    "PL" => "Polish",
    "PT" => "Portuguese", 
    "RU" => "Russian", 
    "ES" => "Spanish",
    "SV" => "Swedish", 
);


foreach ($language_codes as $key => $code)
    if (!empty($trans[$code]))
        $language_codes[$key] = $trans[$code];    

var_dump($language_codes);

それが機能することの証明:http://codepad.org/PR5pPqcX

于 2011-06-24T18:18:21.003 に答える
1

コードごとにループし$langcodesて呼び出す必要があると思います。PHP のマニュアルstrtr()によると、最初のパラメーターは文字列の配列ではなく、文字列でなければなりません。

于 2011-06-24T18:16:21.897 に答える
1

次のようにarray_map関数を使用するのはどうですか:

function mapLang($l) {
   global $trans;
   return $trans[$l];
}
$langcodes = array_map("mapLang", $langcodes);
print_r($langcodes);

出力

Array
(
    [0] => Danish
    [1] => German
    [2] => English
    [3] => Spanish
    [4] => Finnish
    [5] => French
    [6] => Italian
    [7] => Japanese
    [8] => Korean
    [9] => Dutch
    [10] => Norwegian
    [11] => Polish
    [12] => Portuguese
    [13] => Russian
    [14] => Swedish
    [15] => Chinese
)
于 2011-06-24T18:44:56.257 に答える
0

PHPのドキュメントではstrtr()、引数 #1 の配列サポートについては言及されていません。配列は、引数 #2 でのみサポートされています。これは単に機能しません。独自のループをロールする必要があります。方法は次のとおりです。

<?php
$languages = array('DA', 'DE', 'EN', 'ES', 'FI', 'FR', 'IT', 'JA', 'KO', 'NL', 'NO', 'PL', 'PT', 'RU', 'SV', 'ZH');
$trans = array(
        'EN' => 'English', 
        'ZH' => 'Chinese', 
        'DA' => 'Danish',
        'NL' => 'Dutch', 
        'FI' => 'Finnish', 
        'FR' => 'French',
        'DE' => 'German', 
        'IT' => 'Italian', 
        'JA' => 'Japanese',
        'KO' => 'Korean', 
        'NO' => 'Norwegian', 
        'PL' => 'Polish',
        'PT' => 'Portuguese', 
        'RU' => 'Russian', 
        'ES' => 'Spanish',
        'SV' => 'Swedish', 
    );
foreach($languages as &$language) {
    $language = strtr($language, $trans);
}
print_r($languages);
?>
于 2011-06-24T18:17:05.960 に答える