2011-10-25 7 views
1

Je tableau comme ceci:tableau php recherche complexe

[0] => 
    ['lang'] => 'DE', 
    ['message'] => 'some text' 
[1] => 
    ['lang'] => 'EN', 
    ['message'] => 'some text' 
[2] => 
    ['lang'] => 'NZ', 
    ['message'] => 'some text' 
[3] => 
    ['lang'] => 'CH', 
    ['message'] => 'some text' 

et l'article comme celui-ci si $lang = 'NZ' introuvable, trouver et retourner un message pour $default_lang = 'DE', sinon un message de retour pour 'NZ'

ma réalisation:

foreach($res_arr as $key => $value) { 
    if ($res_arr[$key]['lang'] == $lang) { 
     return $res_arr[$key]['message']; 
    } 
} 

foreach($res_arr as $key => $value) { 
    if ($res_arr[$key]['lang'] == $default_lang) { 
     return $res_arr[$key]['message']; 
    } 
} 

est-il une meilleure façon de le faire?

+0

Idée rapide: Si possible, créez le tableau pour avoir les codes de langue en tant que clés. Ensuite, vous pouvez vérifier s'il existe une entrée pour la langue spécifique dans votre tableau. –

Répondre

3

Essayez avec:

$lang = ''; // lang param 
$default_lang = 'DE'; 
$languages = array(
    'DE' => 'some text', 
    'EN' => 'some text', 
    'NZ' => 'some text', 
    'CH' => 'some text' 
); 

if (!isset($languages[$lang])) { 
    $lang = $default_lang; 
} 
$message = $languages[$lang]; 

Modifier

Way pour transformer votre tableau dans mon tableau $languages:

$languages = array(); 
$your_array = array(/* your data */); 

foreach ($your_array as $val) { 
    $languages[ $val['lang'] ] = $val['message']; 
} 
+0

c'est la méthode la plus rapide que je connaisse, mais d'une part, je devrais en quelque sorte transformer mon tableau en le vôtre et je ne sais pas comment le faire. – Yekver

+0

@Yekver regarder ma modification – hsz

0

Je suis certain que array_search fonctionnera ici à savoir le tableau multidimensionnel. Quoi qu'il en soit, voici ma solution:

$default_lang_msg = ''; 
foreach($res_arr as $key => $value) { 
    if ($res_arr[$key]['lang'] == $lang) { 
     return $res_arr[$key]['message']; 
    } 
    else if ($res_arr[$key]['lang'] == $default_lang) { 
     $default_lang_msg = $res_arr[$key]['message']; 
    }  
} 

return $default_lang_msg; 

tableau btw avec le code de langue clés est la voie à suivre si vous pouvez vous permettre de changer la même chose.