我正在重构一些使用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');
...
}
}
它有太多的情况,导致大量代码,现在,我想用table driven approach执行此操作,但问题是,当我为string2num()
构建表时:{ {1}},我无法重复$table = array('AB' => 1, 'CD' => 2, 'GH' => 2, 'EF' => 3, ...);
中的表格(我的意思是num2String()
,然后使用它),因为array_flip($table)
中的重复值在翻转时只会成为一个键。我知道我可以用2张桌子来做,有人有更好的解决方案吗?
答案 0 :(得分: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);
}