我正试图通过两个阵列从网站上的数据库中获取价值。我真的不知道该怎么做,也找不到我的问题的好答案。
所以,我想制作一个包含3种语言的多语种网页。我创建了一个包含wordid
,word
,en
,de
,ru
列的数据库,我希望在其中一个列中获取一个值语言。
这是我的表:
WORDID WORD EN DE RU
1 admin_hello Hello Hallo Privet
我希望得到一个类似$ lang ['admin_hello'] ['de']的值,没有循环。
PHP:
$translation = "SELECT word_id, word, en, ru, lt FROM translation";
$translation_result = mysql_query($translation);
if ($translation_result) {
while ($lang = mysql_fetch_assoc($translation_result)) {
echo $lang['admin_hello']['en'];
echo $lang['admin_hello']['de'];
echo $lang['admin_hello']['ru'];
}
}
是的,它使用while,但它不起作用。如何在没有循环的情况下获得$lang['admin_hello']['en']
之类的值,因为对于每一行,它都会打印一个值,所以我希望它没有循环,以翻译整个页面。
任何想法,我该怎么做?
谢谢。
答案 0 :(得分:1)
我会快速解决这个问题:你应该立即停止使用mysql_ *函数,而是使用mysqli或PDO。在PHP 7中已经完全删除了mysql_ *函数。其次,没有循环就无法完成这种事情。 PHP只能将MySQL行映射到单维数组。你可以挖掘一个用于数据透视表或其他东西的库,但你也可以自己写一些这么简单的东西。
话虽如此,您的代码似乎没有做您想要的。 admin_hello
数组键必须与您未选择的admin_hello
列对应。
如果您尝试将整个translation
表映射到以word
(或word_id
)作为第一个键的数组,并使用语言(en / de / ru)作为第二个键,你可以在一个循环中buld数组。我将保留你的mysql_ *函数,以便更容易看到发生了什么,但请努力重构mysqli或PDO的代码。
// Load the words
$words = array();
$language_whitelist = array('en', 'de', 'ru')
$translation = "SELECT word_id, word, en, ru, de FROM translation";
$translation_result = mysql_query($translation);
if (mysql_num_rows($translation_result)) {
while ($row = mysql_fetch_assoc($translation_result)) {
foreach ($language_whitelist as $language) {
$words[$row['word_id']][$language] = $row[$language];
}
}
}
// Display all the words as a demo
foreach ($words AS $word) {
print_r($word);
}
// Or, get a specific word
print $words['admin_hello']['ru'];
或者,如果您只想按需调用单词,则可以将其直接写入查询。这是您可能使用的示例函数。同样,我正在使用过时且不安全的mysql_ *函数来使事情变得可以理解。请勿按原样使用此代码。使用预准备语句来清理针对SQL注入的查询(例如,如果您尝试翻译“你是”这个词,可以想象)。
function translate ($word, $language)
{
$sql = "SELECT {$language} FROM translation WHERE word='{$word}'";
$result = mysql_query($sql);
if (mysql_num_rows($result)) {
$row = mysql_fetch_assoc($result);
return $row[0];
}
else {
// Return the original word if no result is found
return $word;
}
}
// And a demo (assuming you have a translation for "Hello World"):
print "This is how you say 'Hello World' in Russian: " . translate("Hello World", "ru");