2013-12-19 98 views
2

我正在嘗試構建一個能夠以多種語言顯示文本的網站。 我有一個所有語言的表'文本'。如果文本不存在於所選語言中,則必須顯示默認語言。檢查數據庫查詢中是否存在數組中的值

查詢SELECT * FROM text WHERE文本ID = 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

in_array()是可能的..我已經習慣了同樣的問題.. – Vaishu

回答

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

這個函數也可以修改爲檢查'textId','Id'等其他鍵,只要在array key的函數中引入第三個參數,你想檢查的值已經通過了 – minas

+0

是@米納斯,確切地說 –

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'; 
    } 
} 

Working Demo

+0

我覺得像一個完全白癡沒有想過isset()。 非常感謝你 – anatak

0

給了這個更多的想法後,我想出了一個可能不是那麼優雅的解決方案。 而不是返回數組,我修改了SQL查詢以使用默認語言(英語)和用戶選擇的語言(日語)返回一行。 它使用兩個左連接。這表明我在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()函數或空後(),看看是否文本在用戶選擇的語言可用

相關問題