2014-05-17 57 views
8
$lang = array(
     'thank you'=>'You are welcome', 
     'thanks'=>'You are welcome', 
     'thank ya'=>'You are welcome' 
    ); 

正如你所看到的,這將會讓人厭倦,爲同樣的值寫多個鍵有沒有什麼辦法可以做。將多個鍵分配給數組中的相同值

$lang['thanks']=>$lang['thank ya']=>$lang['thank you'] 

只是想從此改寫百倍

對自己節省一些時間在這裏

PHP類功能:

function fetch_key($key, $l,$bool){ 
    $dynamic = new l18n; 
    if($bool == true or is_null($bool)){ 
     return addslashes($dynamic->convert($key,$l)); 
    }else{ 
     return $dynamic->convert($key,$l); 
    } 
    } 

EX

$lang = array(
     'thank you'=>'You are welcome', 
     'thanks'=>'You are welcome', 
     'thank ya'=>'You are welcome', 
     'hello'=>'hello', 
     'goodbye'=>'goodbye' 
    ); 

所以我需要使它成爲它將它添加到數組中而不填充我的關鍵值w如果實際上它們並不完全相同,那麼它們具有相同的價值。我應該在一開始都表示這

+5

我會翻轉數組,讓'你'歡迎''指向所有可能的等價物,而不是指向相同值的所有等價物。這將使用更少的內存。 –

+0

嗯,看看我有一個很長的數組,我使用類如:看到我的新更新。我們使用JS來搜索字符串作爲算法,然後使用默認語言解析出響應。所以讓你受歡迎將無法工作。 – EasyBB

+0

我沒有看到你的修改,防止更清潔的結構。在某些時候,您可能正在執行'isset($ lang [$ word])',並且可以輕鬆循環並使用'array_search'函數。 –

回答

14

您可以使用array_fill_keys()

$keys = array('thank you','thanks','thank ya'); 
$lang = array_fill_keys($keys, 'You are welcome'); 

Example

+2

謝謝你notulysses!我很感激,我仍然在學習PHP,所以這些功能對我來說都是新的。 – EasyBB

+0

@EasyBB:很高興爲您效勞! – potashin

+0

雖然有一個問題是否有逆轉?因爲我的數組不僅僅是這些謝謝你等我需要它,所以我可以做'array_fill_keys($謝謝,'你'歡迎');'但是可以這樣做''thanks'=> array_fill_keys($謝謝,'不用客氣')'?或類似的東西... – EasyBB

2

雖然我不太願意提供一個代碼解決方案,當你承認你是新來的語言而且還沒有研究得好,我希望這個項目是你用語言來學習它,而不是先跳出來給那些最終表現不好的客戶。

編輯:剛剛看到你的「我要上大學的好東西」,我很高興我發佈了幫助。

這是一個結構,它可以做我認爲你正在尋找的東西。

<?php 
class StandardizeSayings { 
    public static $CONVERSIONS = array(
    'You are welcome' => array(
     'thank you', 
     'thanks', 
     'thank ya' 
    ), 
    'Hello' => array('hello'), 
    'Goodbye' => array('goodbye', 'good bye') 
); 

    public static function getStandardization($word) { 
    $word_lowercase = strtolower($word); 
    foreach (StandardizeSayings::$CONVERSIONS as $conversion=>$equivalents) { 
     if (array_search($word_lowercase, $equivalents) !== false) { 
     return $conversion; 
     } 
    } 
    return ''; 
    } 
} 

echo StandardizeSayings::getStandardization('thank ya'); 
?> 

它使用具有靜態成員/方法的類結構(因此不需要實例化該類的實例)。使用預定義的轉換列表很容易進行擴展(在運行時需要進行額外的轉換)。它也應該運行得相當快。

0

我做的三個步驟:

1 - 定義唯一值

2 - 填寫重複值

3 - 聯盟1和2

$lang = array(
    'hello'=>'hello', 
    'goodbye'=>'goodbye' 
); 

$keys = array('thank you','thanks','thank ya'); 
$result = array_fill_keys($keys, 'You are welcome'); 

$lang += $result; 

有一個看看array_fill_keysArray Operators +=