par
vincent.c » 03 nov. 2016, 21:01
Bonsoir,
La fonction preg_replace_callback n'appelle pas la callback à chaque fois. La callback est exécutée uniquement si un résultat est trouvé.
Exemple:
<?php
$input = "Hello World !";
function parseTagsRecursive($input)
{
echo "parseTagsRecursive executed.\n"; // AFFICHE UN TEXTE DE LOG
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';
if (is_array($input)) {
$input = '<div style="margin-left: 10px">'.$input[1].'</div>';
}
return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}
$output = parseTagsRecursive($input);
Ici "parseTagsRecursive executed.\n" ne sera afficher une seule fois, car c'est nous qui en faisons l'appel en dernière ligne du programme.
Si tu ajoutes un message de log dans ton premier exemple, tu verras qu'il passe trois fois: une fois car on l'appelle en fin de programme et deux fois car il y a bien deux occurrences à remplacer.
Bonne soirée.
Bonsoir,
La fonction preg_replace_callback n'appelle pas la callback à chaque fois. La callback est exécutée uniquement si un résultat est trouvé.
Exemple:
[php]<?php
$input = "Hello World !";
function parseTagsRecursive($input)
{
echo "parseTagsRecursive executed.\n"; // AFFICHE UN TEXTE DE LOG
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';
if (is_array($input)) {
$input = '<div style="margin-left: 10px">'.$input[1].'</div>';
}
return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}
$output = parseTagsRecursive($input);[/php]
Ici "parseTagsRecursive executed.\n" ne sera afficher une seule fois, car c'est nous qui en faisons l'appel en dernière ligne du programme.
Si tu ajoutes un message de log dans ton premier exemple, tu verras qu'il passe trois fois: une fois car on l'appelle en fin de programme et deux fois car il y a bien deux occurrences à remplacer.
Bonne soirée.