PHP数组复杂搜索


php array complex search

我有一个这样的数组:

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

有更好的方法吗?

Try with:

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

我怀疑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数组语言代码作为键是一种方式,如果你能负担得起改变相同。