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将仅成为一个键。我知道我可以用 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 回答