php显示变量键的数组值

时间:2011-01-22 21:58:38

标签: php arrays

我正在努力建立一个多语言的网站。通过构建一个语言字典数组(如果它不是最好的方式,请不要犹豫,让我知道)

$fr=array();

$fr['hello']="Bonjour";

我想创建一个执行以下操作的函数:

代表每个单词和语言function ( $word ="hello",$language="fr")

它会返回正确的值。到目前为止,我正在做的方式不起作用

echo $$language[$word];

任何想法? 谢谢

4 个答案:

答案 0 :(得分:4)

默认情况下,变量是函数的本地变量。如果你的字典数组是全局的,你需要将它们声明为全局,但由于名称是可变的,你必须通过$GLOBALS访问它们:

function foo($word, $language) {
  echo $GLOBALS[$language][$word];
}

至于更好的方法,您可能只想使用一个多维数组,而不是为每种语言创建一个变量:

$dict = array();
$dict['fr']['hello'] = 'Bonjour';

function foo($word, $language) {
  global $dict;
  echo $dict[$language][$word];
}

答案 1 :(得分:3)

这里要提几件事......

  1. 我建议您使用实际的“区域设置”(language codecountry code)来引用您的语言而不是您的双字母国家/地区代码。你的例子包括法语的“fr”。典型的惯例是使用区域设置名称。例如法语(法国)的fr_FR和法语(加拿大)的fr_CA。语言可以在很大程度上取决于国家(如果你是美国本土英语,并且去澳大利亚旅行,你会明白我在说什么)。

  2. 根据您网站的大小,您可能不希望将其保留为PHP字典/关联数组。这里有很多选项(将翻译放在数据库,共享内存等)。如果你把它保存在PHP内存中,opcode caching将是一个好主意,并且相对容易设置。我鼓励你看看其他框架是如何实现这一点的(理想情况下可能使用现有框架来实现这一点)。

  3. 你提到翻译“单词”。通常,在对网站进行国际化时,您需要翻译短语。翻译单词然后将它们粘合在一起通常会导致翻译不良。

  4. 如果您坚持使用dict路径,我强烈建议您放弃变量名称/语言名称的动态解释,而不是嵌套的关联数组。例如$dict['fr_FR']['hello'] = 'bonjour';

答案 2 :(得分:1)

您可能需要考虑使用单个(嵌套)数组

$strings = array(
    "french" => array(
        "stringID" => "foobar"
    )
);

echo( $strings["french"]["stringID"] );

如果您没有使用数据库,我强烈建议您查看此内容。 MySQL和PostgreSQL往往是独立和小型开发商店的热门选择。

答案 3 :(得分:0)

$$语言[$ word]无效

工作是

$ ARR = $$语言;

$ ARR [$字];