2013-03-26 43 views
-4

我有以下代碼。如何使PHP str_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); 

正如你所看到的,這看起來確實很醜。我怎樣才能減少這些行數?

+0

'$ obj->符號= strtr函數的效率;' – DCoder 2013-03-26 19:13:15

回答

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); 
+0

I($ obj->符號,陣列(=> 'p',...) 'PR'。)發現這個答案更具視覺上令人愉悅。謝謝 – kidonchu 2013-03-27 21:35:32

7

您可以將數組傳遞給函數。做這樣的事情:

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

我有點遲到了,但我總是已經一直preg_replace_callback()的一個風扇:

$good_string = preg_replace_callback('/([PURW])[RNT]\.?/',function ($matches){ 
    return strtolower($matches[1]); 
},$bad_string);