我有以下代码。
$obj->symbol = str_replace('PR.', 'p', $obj->symbol);
$obj->symbol = str_replace('UN.', 'u', $obj->symbol);
$obj->symbol = str_replace('RT.', 'r', $obj->symbol);
$obj->symbol = str_replace('WT.', 'w', $obj->symbol);
$obj->symbol = str_replace('PR', 'p', $obj->symbol);
$obj->symbol = str_replace('UN', 'u', $obj->symbol);
$obj->symbol = str_replace('RT', 'r', $obj->symbol);
$obj->symbol = str_replace('WT', 'w', $obj->symbol);
如你所见,这看起来很难看。如何将其减少到更少的行?
答案 0 :(得分:7)
您可以将数组传递给函数。做这样的事情:
$obj->symbol = str_replace(array('PR.','UN.'), array('p','u'), $obj->symbol);
答案 1 :(得分:4)
我建议的最多就是使用相同替代品的冷凝线:
$obj->symbol = str_replace( array( 'PR.', 'PR'), 'p', $obj->symbol);
至少这仍然是可维护和可读的。如果您将此压缩为包含两个大型数组的一行,则应将该数组存储为key => value
替换地图,并改为使用strtr()
:
$replacements = array(
'PR' => 'p',
'PR.' => 'p'
// etc
);
$obj->symbol = strtr( $obj->symbol, $replacements);
答案 2 :(得分:0)
我参加派对有点晚了,但我一直都是preg_replace_callback()的粉丝:
$good_string = preg_replace_callback('/([PURW])[RNT]\.?/',function ($matches){
return strtolower($matches[1]);
},$bad_string);