从数组中获取特定行,其中列设置为给定值

时间:2014-09-19 12:18:07

标签: php mysql

我的目标是创建一个多语言网站。 起初,我计划只有3种语言(法语,德语和英语)。

欢迎页面将以英文显示,然后将通过php会话传送的变量对下一页进行本地化。

我创建了一个包含以下列的表格page2:

Field_name | English | German | French

表包含:

Name | "Your name" | "Ihre Name" | "Votre nom"

Street | "Streetname" | "Ihre Strasse" | "Votre rue"

... 

php代码:

$sql = "SELECT * FROM page2;";

$result = mysql_query($sql);

我想以适当的语言显示表格内容(在页面的几个部分中)。

如果是英文: 你的名字:史密斯(从另一张表中检索的价值 - 这里不是问题!)

如果是德语: Ihre Name:Smith(从另一个表中检索的值 - 这里不是问题!)

我的问题是如何拥有"你的名字"或者" Ihre Name"或" Votre nom"如:

echo $result['Name'][column=$lang];

显示"英语"行的列值"名称"如果英语设置为$ lang

显示"德语"行的列值"名称"如果德语设置为$ lang

5 个答案:

答案 0 :(得分:1)

我认为这就是你想要的:

$query = "SELECT `$language` FROM `page2` WHERE `Field_name` = 'Street'";
echo $result[$language];

答案 1 :(得分:0)

你已经拥有它了:

$lang="German";
$sql = "SELECT * FROM page2 where field_name='Name'";
// etc...
echo $result[$lang];

只需根据需要输入field_name,然后访问数组的结果"英语","德语"或"法语"。

答案 2 :(得分:0)

我不完全理解你描述表格的方式,但这应该让你大致了解一种方法。我们将所有结果添加到名为$ names的数组中。然后,对于每一行,我们都会添加一个带有该语言的密钥,然后在那里我们添加该语言的人名。

$names = array();
for( $i=0; $r=mysql_fetch_assoc( $sql ); $i++ ){
    $names[$i][$r['language']] = $r['name'];
}

答案 3 :(得分:0)

你应该试试这个:

    $arrResult = array();
    $sql    = "SELECT * FROM page2";
    $result = mysql_query($sql);
    while($row    = mysql_fetch_assoc($result))
    {
    $arrResult[$row['field_name']] =  $row;
    }

    echo $arrResult['Name']['English'];

答案 4 :(得分:0)

我将在这里偏离其他答案的模式,并建议您的数据模型不正确,应该更改。

如果要添加更多语言,则需要为每种语言添加列,以修改表的结构。我相信修改表格中的数据会更有意义:

field_name | lang | value
-----------+------+-------------
name       | EN   | Your name
name       | DE   | Ihre Name
name       | FR   | Votre nom
street     | EN   | Streetname
street     | DE   | Ihre Strasse
...

这样您可以使用如下查询:

select * from page2 where lang = ?

,然后只需在代码中使用$result['name']$result['street']请参阅下面的编辑2.

添加新语言就像执行insert语句一样简单。


<强> 修改

我强烈建议您阅读“Why shouldn't I use mysql_* functions in PHP?


编辑2

正如ChristopheL所述,需要以下方法来检索值:

while ($row = mysql_fetch_assoc($result)) {
    $arrResult[$row['field_name']] = $row;
}
echo $arrResult['name']['value'];
echo $arrResult['street']['value'];