2011-10-25 86 views
1

我有數組是這樣的: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']; 
    } 
} 

有沒有更好的方法來做到這一點?

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

這是我知道的最快的方法,但首先我應該以某種方式將我的數組轉換爲您的數組,我不知道如何執行此操作。 – Yekver

+0

@Yekver看看我的編輯 – hsz

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; 

與語言代碼順便說一句數組鍵是去,如果你能負擔得起改變相同的方式。