Yekver
Yekver

Reputation: 5195

php array complex search

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

Answers (2)

hsz
hsz

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

Vikk
Vikk

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

Related Questions