如何使PHP str_replace不那么冗长

时间:2013-03-26 19:11:19

标签: php string replace

我有以下代码。

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

如你所见,这看起来很难看。如何将其减少到更少的行?

3 个答案:

答案 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);