Я рефакторинг некоторого существующего кода, который конвертирует между 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 таблицами, у кого-то есть лучшее решение?
Создайте таблицу следующим образом:
$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);
}
Других решений пока нет …