我正在处理以多种语言编写的产品列表。我为每个产品都有一个数组,显示如下语言:
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保存数组值。
答案 0 :(得分: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);
答案 1 :(得分:1)
我认为您必须遍历$langcodes
并为每个代码调用strtr()
。根据{{3}},第一个参数必须是字符串,而不是字符串数组。
答案 2 :(得分: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
)
答案 3 :(得分:0)
PHP docs for 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);
?>