web-dev-qa-db-ja.com

配列内の同じ値に複数のキーを割り当てます

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

ご覧のとおり、これは同じ値に対して複数のキーを書くのが面倒になるでしょう。私にできる方法はありますか。

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

ここで100回書き直すことから自分自身を節約しようとしているだけです

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

したがって、実際にはすべてが完全に同じではない場合でも、配列に追加し、キー値を同じ値で埋めないようにする必要があります。私は最初にこれを述べるべきでした

11
EasyBB

array_fill_keys() を使用できます:

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

18
potashin

あなたがその言語に不慣れで、それを十分に研究していないことを認めたとき、私はコードソリューションを提供することを躊躇しますが、このプロジェクトがあなたが言語で遊んでそれを学ぶのではなく、それを学ぶことを願っています最初に頭に飛び込んで、最終的にはうまく機能しないクライアントに何かを与えることです。

編集:あなたの「私がこれのために大学に行くのは良いこと」を見たばかりで、私が助けてくれてうれしいです。

これがあなたがやろうとしていると私が信じていることをする構造です。

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

静的メンバー/メソッドを持つクラス構造を使用します(したがって、クラスのインスタンス化は必要ありません)。事前定義された変換リストを使用して拡張するのは簡単です(実行時に追加の変換を追加するには作業が必要です)。また、かなり高速に実行されるはずです。

3
Sylas Seabrook

私は3つのステップでそれを行います:

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_keys および 配列演算子+ = をご覧ください

1
micaball