2013-12-19 6 views
2

Я пытаюсь создать веб-сайт, на котором будет отображаться текст на нескольких языках. У меня есть таблица «текст» со всеми языками. Если текст не существует на выбранном языке, он должен отображать язык по умолчанию.проверить, существует ли значение в массиве из запроса базы данных

запрос 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

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', просто ввести третий параметр в функцию для ключа массива, значение, которое вы хотите проверить, уже передается – 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 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;"; 

после возвращения результатов можно легко проверить с Исеть() или пустой(), чтобы увидеть, если текст доступна у выбранного вами языка

Смежные вопросы