2013-04-10 5 views
1

Comment utiliser une variable locale dans preg_replace_callback en PHP. J'ai le code suivant:Utiliser une variable locale dans preg_replace_callback - PHP

function pregRep($matches) 
{ 
global $i; $i++; 

if($i > 2) 
{  
    return '#'.$matches[0]; 
} 
else 
{ 
return $matches[0]; 
} 
} 

$i = 0; $str = preg_replace_callback($reg_exp,"pregRep",$str); 

Et aussi $str est une chaîne, $reg_exp est une expression regex. Les deux sont bien définis.

Merci pour votre aide.

+0

L'utilisation du mot-clé 'global' est, en général, une [odeur de code] (http://en.wikipedia.org/wiki/Code_smell). – cmbuckley

Répondre

5

Le plus simple est avec un rappel anonyme:

$str = preg_replace_callback($regExp,function($match) use ($some_local_variable) { 
    // do something 
},$str); 

Notez que vous pouvez ajouter plusieurs variables de cette façon, mais il crée une copie de cette variable comme lorsque la fonction est définie (ce est important si vous l'attribuez à une variable pour plusieurs utilisations). Si vous voulez une référence "en direct" à la variable, utilisez &$some_var.

Bien sûr, cela nécessite PHP 5.3 ou plus récent.

Questions connexes