Php 从列设置为给定值的数组中获取特定行

Php 从列设置为给定值的数组中获取特定行,php,mysql,Php,Mysql,我的目标是创建一个多语言网站。 起初,我计划只学3种语言(法语、德语和英语) 欢迎页面将以英语显示,接下来的页面将通过php会话携带的变量进行本地化 我创建了一个表page2,其中包含以下列: Field_name | English | German | French 表中包含: Name | "Your name" | "Ihre Name" | "Votre nom" Street | "Streetname" | "Ihre Strasse" | "Votre rue" ...

我的目标是创建一个多语言网站。 起初,我计划只学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);
我想用适当的语言显示表格内容(在页面的几个部分)

$names = array();
for( $i=0; $r=mysql_fetch_assoc( $sql ); $i++ ){
    $names[$i][$r['language']] = $r['name'];
}
如果是英文: 您的姓名:Smith(从另一个表中检索到的值-这里不是问题!)

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

我的问题是如何使用“你的名字”或“我的名字”或“Votre nom”,例如:

如果在$lang中设置了英语,则显示行“名称”的“英语”列值


如果德语设置为$lang,则显示行“Name”的“德语”列值

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

只需根据需要输入
字段\u name
,然后访问数组“English”、“German”或“French”的结果即可。

我不完全理解您描述表格的方式,但这应该可以让您大致了解一种方法。我们将所有结果添加到名为$names的数组中。然后,我们为每一行添加一个使用该语言的键,并在该键下添加使用该语言的人的姓名

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

我想这就是你想要的:

$query = "SELECT `$language` FROM `page2` WHERE `Field_name` = 'Street'";
echo $result[$language];
你应该试试这个:

    $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'];

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

要为每种语言创建一列,需要在添加更多语言时修改表的结构。我认为修改表中的数据以实现这一点更有意义:

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
语句一样简单


编辑

我强烈建议你读一读“


编辑2

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

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

你好,Tim,我试着按照你的建议实现我的数据模型。但是,我无法显示结果$sql=“选择字段名称,第2页的值”$结果=mysql\u查询($sql);echo$results['name'];它没有显示任何内容。有什么想法吗?克里斯托弗·海洛@克里斯托弗。我写这篇文章的时候一定过得很糟糕,因为它不起作用!我会在有时间的时候修改我的答案。你好,蒂姆,我用:$sql=“选择字段名称,第2页的值”$结果=mysql\u查询($sql);而($row=mysql\u fetch\u assoc($result)){$arrResult[$row['field\u name']]=$row;}echo$arrResult['name']['value'];echo$arresult['street']['value'];干杯,克里斯托弗。