Allons, comment est-il difficile d'écrire une fonction qui fonctionne toujours? Toutes les réponses affichées à ce jour donnera des résultats incorrects pour la chaîne d'entrée suivantes et les valeurs de remplacement:
$in="This i%s my ? input ? string";
$replace=array("jo%shn?",3);
Un problème souvent négligé est que si vous changez la chaîne d'entrée, les valeurs de remplacement contenant le motif d'entrée d'origine peut-être remplacé à nouveau. Pour résoudre ce problème, vous devez créer une nouvelle chaîne. En outre, les solutions sprintf font l'hypothèse (peut-être incorrecte) que la chaîne d'entrée ne contient jamais '% s'. L'affiche originale n'a jamais dit que c'était le cas, donc '% s' devrait être laissé seul.
Essayez plutôt cette fonction. Ce n'est peut-être pas la solution la plus rapide et la plus élégante, mais au moins cela donne des résultats de sortie raisonnables (ahum) indépendamment de l'entrée.
function replace_questionmarks($in,$replace)
{
$out="";
$x=0;
foreach (explode("?",$in) as $part)
{
$out.=$part;
$out.=$replace[$x++];
}
return $out;
}
$in="This i%s my ? input ? string";
$replace=array("jo%shn?",3);
print replace_questionmarks($in,$replace);
Sortie:
This i%s my jo%shn? input 3 string
L'OP a demandé: "Comment puis-je remplacer plusieurs occurrences d'un caractère unique * * avec un tableau de variables?". 'vsprintf' sert à remplacer les spécificateurs de format (qui sont au moins deux caractères, dont'% '). –
@Delan Azabani: il n'est pas si difficile de remplacer tout '?' Par '% s' avant d'obtenir exactement' Ceci est un% s% s .' chaîne – zerkms
Merci pour vsprintf. Défiant la réponse la plus simple. – ATLChris