-4

私は次のコードを持っています。

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

ご覧のとおり、これは本当に醜いようです。これをより少ない行に減らすにはどうすればよいですか?

4

3 に答える 3

7

配列を関数に渡すことができます。このようなことをします:

$obj->symbol = str_replace(array('PR.','UN.'), array('p','u'), $obj->symbol);
于 2013-03-26T19:13:15.557 に答える
4

私が最もお勧めするのは、同じ代替品を持つ凝縮ラインです。

$obj->symbol = str_replace( array( 'PR.', 'PR'), 'p', $obj->symbol);

少なくとも、これはまだ保守可能で読みやすいです。これを2つの大規模な配列で1行に凝縮する場合は、その配列をkey => value置換マップとして保存し、strtr()代わりに次を使用する必要があります。

$replacements = array(
    'PR'  => 'p',
    'PR.' => 'p' 
    // etc
);

$obj->symbol = strtr( $obj->symbol, $replacements);
于 2013-03-26T19:17:35.073 に答える
0

私はパーティーに少し遅れていますが、私はいつもpreg_replace_callback()のファンでした:

$good_string = preg_replace_callback('/([PURW])[RNT]\.?/',function ($matches){
  return strtolower($matches[1]);
},$bad_string);
于 2014-04-17T01:36:21.370 に答える