0

switch-case ステートメントを使用して A と B を変換する既存のコードをリファクタリングしています。次のようになります。

<?php
function string2num($s)
{
    switch($s){
        case 'AB':
            return 1;
        case 'CD':
        case 'GH':
            return 2;
        case 'EF':
            return 3;
        ...
    }
}

function num2String($n)
{    
    switch($n){
        case 1:
            return 'AB';
        case 2:
            return array('CD', 'GH');
        ...
    }

}

そして、ケースが多すぎるため、大量のコードが発生します。今、テーブル駆動のアプローチでこれを行いたいのですが、問題は、string2num():のテーブルを作成すると、テーブルを$table = array('AB' => 1, 'CD' => 2, 'GH' => 2, 'EF' => 3, ...);再利用できないことですnum2String()(Iつまりarray_flip($table)、それを使用します) の重複した値は$table、反転時に 1 つのキーになるためです。私は2つのテーブルでそれを行うことができることを知っています.誰かがより良い解決策を持っていますか?

4

1 に答える 1

3

次のようにテーブルを作成します。

$table = array(
    'AB' => 1,
    'CD' => 2,
    'GH' => 2,
    'EF' => 3,
);

オプションの検索パラメーターを指定してarray_keys()関数を使用すると、複数のキーを取得できます。

$keys = array_keys($table, 2);

戻ります

array('CD', 'GH');

解決:

$table = array(
    'AB' => 1,
    'CD' => 2,
    'GH' => 2,
    'EF' => 3,
);

function string2num($table, $string) {
    if(isset($table[$string])) {
        return $table[$string]; 
    }
}

function num2String($table, $number) {    
    return array_keys($table, $number);

}
于 2014-10-30T11:19:32.110 に答える