заменить операторы switch-case на табличный подход

Я рефакторинг некоторого существующего кода, который конвертирует между A и B, используя операторы switch-case, это выглядит так:

<?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()(Я имею в виду, array_flip($table), затем используйте его), так как повторяющиеся значения в $table станет только один ключ при переключении. Я знаю, что я могу сделать это с 2 таблицами, у кого-то есть лучшее решение?

0

Решение

Создайте таблицу следующим образом:

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

}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]