我正在尝试构建一个以多种语言显示文本的网站。 我有一个包含所有语言的表'text'。如果所选语言中不存在该文本,则必须显示默认语言。
查询SELECT * FROM text
WHERE TextId = 10
结果
Id TextId LanguageId Text
10 10 1 first name
13 10 2 名前
如果我r_print这个结果我得到这样的东西
Array ( [0] => Array ( [0] => 10 [Id] => 10 [1] => 10 [TextId] => 10 [2] => 1 [LanguageId] => 1 [3] => first name [Text] => first name )
[1] => Array ( [0] => 13 [Id] => 13 [1] => 10 [TextId] => 10 [2] => 2 [LanguageId] => 2 [3] => 名前 [Text] => 名前 ) )
如何检查此数组中是否存在LanguageId 2? 问题是TextId 2和Id 2也可能存在于这个数组中。
是否可以使用in_array()
?
答案 0 :(得分:2)
这是一个可以检查LanguageId是否等于特殊值的函数。
function isLanguageIdExists($yourArray , $LanguageId){
$exists=false;
foreach($yourArray as $array){
if(isset($array['LanguageId'])&& $array['LanguageId'] == $LanguageId){
$exists=true;break;
}
}
return $exists;
}
$exist = isLanguageIdExists($yourArray , 2);//return true or false
答案 1 :(得分:0)
您可以通过isset检查密钥并匹配php中的值。
$dataArray = array(
0 => array(0 => 10 ,'Id' => 10, 1 => 10, 'TextId' => 10, 2 => 1, 'LanguageId' => 1),1 => array(0 => 10 ,'Id' => 10, 1 => 10, 'TextId' => 10, 2 => 1, 'LanguageId' => 1)
);
foreach($dataArray as $value) {
if(isset($value['LanguageId']) && $value['LanguageId'] == 2) {
echo 'language ID 2 is available';
}
}
答案 2 :(得分:0)
在给出更多想法之后,我想出了一个可能不那么优雅的解决方案。 我没有获取数组,而是修改了SQL Query,使用默认语言(英语)和用户选择的语言(日语)返回一行。 它使用两个左连接。这表明我接受了(一些)SQL训练,但我对多维数组并不感到轻松。
查询 def_text =默认语言的文本 usr_text =用户选择语言的文本
$table01 = "text";
$query="SELECT $table01.TextId,
text_def.Text as def_text,
text_usr.Text as usr_text
FROM $table01
LEFT JOIN $table01 as text_def ON $table01.TextId = text_def.TextId AND text_def.LanguageId = $_SESSION[default_language]
LEFT JOIN $table01 as text_usr ON $table01.TextId = text_usr.TextId AND text_usr.LanguageId = $_SESSION[language]
WHERE $table01.TextId=$mess;";
获取结果后,可以使用isset()或empty()查看文本是否以用户选择的语言显示