Reputation: 5195
I have array like this:
[0] =>
['lang'] => 'DE',
['message'] => 'some text'
[1] =>
['lang'] => 'EN',
['message'] => 'some text'
[2] =>
['lang'] => 'NZ',
['message'] => 'some text'
[3] =>
['lang'] => 'CH',
['message'] => 'some text'
and clause like this if $lang = 'NZ'
not found then find and return message for $default_lang = 'DE'
, else return message for 'NZ'
my realization:
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'];
}
}
is there any better way to do this?
Upvotes: 1
Views: 385
Reputation: 152284
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];
Edit
Way to transform your array into my $languages
array:
$languages = array();
$your_array = array( /* your data */ );
foreach ( $your_array as $val ) {
$languages[ $val['lang'] ] = $val['message'];
}
Upvotes: 3
Reputation: 3363
I'm a doubtful whether array_search will work here i.e. on multi-dimenstional array. Anyways, here is my 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;
btw array with language code as keys is the way to go if you can afford to change the same.
Upvotes: 0