2010-01-01 65 views
2

在preg_replace的文档中说它可以使用索引数组来替换多个字符串。我想用关联数组来做到这一点,但它似乎不起作用。使用关联数组和preg_replace

有谁知道这是否确实无效?

+0

请参阅此链接[Pre_REPLACE与Asscoiate阵列] [1] [1]:http://stackoverflow.com/questions/17979011/use-preg-replace-to-replace-whole-words - 使用相联阵列 – 2015-03-09 02:42:37

回答

5

你想在键或键和值上做这个或只是保留键和处理值?无论哪种情况,array_combine(),array_keys()array_values()都可以结合使用。

上的按键:

$keys = array_keys($input); 
$values = array_values($input); 
$result = preg_replace($pattern, $replacement, $keys); 
$output = array_combine($result, $values); 

上的按键和值:

$keys = array_keys($input); 
$values = array_values($input); 
$newKeys = preg_replace($pattern, $replacement, $keys); 
$newValues = preg_replace($pattern, $replacement, $values); 
$output = array_combine($newKeys, $newValues); 

上的值保持键:

$keys = array_keys($input); 
$values = array_values($input); 
$result = preg_replace($pattern, $replacement, $values); 
$output = array_combine($keys, $result); 

所有这些假设的功能是这样的:

function regex_replace(array $input, $pattern, $replacement) { 
    ... 
    return $output; 
} 
1

如果我理解这个正确的,你想要的是:

$patterns = array_keys($input); 
$replacements = array_values($input); 
$output = preg_replace($patterns,$replacements,$string); 
0

花的时间相当位在这等会增加我的回答

$str = "CT is right next to NY"; 

$list = array('CT'=>'connenticut', 'NY'=>'New York', 'ME' => 'Maine'); 
$list = get_json(); 

$pattern = array_keys($list); 
$replacement = array_values($list); 

foreach ($pattern as $key => $value) { 
    $pattern[$key] = '/\b'.$value.'\b/i'; 
} 

$new_str = preg_replace($pattern,$replacement, $str); 

请确保您使用/ delimiters/for正则表达式模式匹配。 \ b是用于文字边界。