将多个键分配给数组中的相同值

问题描述 投票:9回答:3
 $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'
    ); 

所以我需要将它添加到数组中,而不是用相同的值填充我的键值,而实际上它们并非完全相同。我应该在开头说明这一点

php arrays key key-value
3个回答
17
投票

你可以使用array_fill_keys()

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

Example


3
投票

虽然当你承认自己是语言新手并且没有对它进行过很好的研究时我仍然不愿提供代码解决方案,但我希望这个项目是你在玩这种语言来学习它而不是首先跳进去向客户提供最终表现不佳的东西。

编辑:刚刚看到你的“好东西,我要上大学”,我很高兴我发布了帮助。

这是一个我相信你正在寻求做的结构。

<?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');
?>

它使用具有静态成员/方法的类结构(因此不需要实例化类)。使用预定义的转换列表很容易扩展(需要在运行时添加额外的转换工作。)它也应该运行得相当快。


1
投票

我分三步完成:

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 +=

© www.soinside.com 2019 - 2024. All rights reserved.