2014-05-17 60 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 +=