2010-01-01 7 views
2

Dans la documentation de preg_replace, il est indiqué que vous pouvez utiliser des tableaux indexés pour remplacer plusieurs chaînes. Je voudrais le faire avec des tableaux associatifs, mais cela ne semble pas fonctionner.Utilisation de tableaux associatifs avec preg_replace

Est-ce que quelqu'un sait si cela ne fonctionne pas vraiment?

+0

Voir ce lien [Pre_REPLACE avec Array Asscoiate] [1] [1]: http://stackoverflow.com/questions/17979011/use-preg-replace-to-replace-whole-words -using-associative-array –

Répondre

5

Voulez-vous le faire sur les touches ou les touches et les valeurs ou simplement conserver les clés et traiter les valeurs? Quel que soit le cas, array_combine(), array_keys() et array_values() peuvent réaliser ceci en combinaison.

Sur les touches:

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

Sur les touches et les valeurs:

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

Sur les valeurs clés de maintien:

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

Tous ces supposent un quelque chose comme fonction:

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

Si je comprends bien, ce que vous voulez est:

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

peu passé pas mal de temps sur ce donc ajoutera ma réponse

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

Assurez-vous d'utiliser/delimiters/pour la correspondance de regex. \ b est pour la limite de mot.