#php #arrays
#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'];
}
}
есть ли лучший способ сделать это?
Комментарии:
1. Быстрая идея: если возможно, создайте массив, чтобы в качестве ключей использовались коды языков. Затем вы можете проверить, есть ли в вашем массиве запись для определенного языка.
Ответ №1:
Попробуйте с:
$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. это самый быстрый метод, который я знаю, но сначала я каким-то образом должен преобразовать свой массив в ваш, и я не знаю, как это сделать.
Ответ №2:
Я сомневаюсь, будет ли 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;
кстати, массив с кодом языка в качестве ключей — это правильный путь, если вы можете позволить себе изменить то же самое.