php数组复杂搜索

时间:2011-10-25 13:07:59

标签: php arrays

我有这样的数组:

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

有没有更好的方法呢?

2 个答案:

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

答案 1 :(得分: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;

如果你有能力改变相同的语言代码作为键的btw数组。