2011-10-25 37 views
1

我有数组是这样的:PHP数组复杂的搜索

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

和条款这样如果$lang = 'NZ'找不到,则查找并$default_lang = 'DE',否则返回消息返回消息'NZ'

我实现:

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

有没有更好的方法来做到这一点?

+0

快速构思:如果可能,创建数组以将语言代码作为关键字。然后您可以检查数组中是否存在特定语言的条目。 –

回答

3

尝试:

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

编辑

方式来改变你的阵列到我$languages数组:

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

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

这是我知道的最快的方法,但首先我应该以某种方式将我的数组转换为您的数组,我不知道如何执行此操作。 – Yekver

+0

@Yekver看看我的编辑 – hsz

0

我是怀疑是否array_search会即在这里工作多维数组。不管怎么说,这里是我的解决方案:

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

与语言代码顺便说一句数组键是去,如果你能负担得起改变相同的方式。