2009-03-29 10 views
1

i ont une chaîne avec guillemet comme ceChaîne avec guillemets doubles et simple cité

$count = 5; 
$str = "result: $count"; 
echo $str; //result: 5 
fonctionnent bien parsing variables

, et mon problème est $ count var doit être définir plus tard $ str

$str = "result: $count"; 
$count = 5; 
echo $str; //result: 

Je vais donc utiliser guillemet simple et poser une question ici de trouver un moyen d'analyser var chaque fois que je veux

$str = 'result: $count'; 
$count = 5; 
//TODO: parse var process 
echo $str; //result: 5 

Je ne vais pas utiliser regex remplacer. Preg_replace est la méthode la plus simple.

Répondre

7

Pour ce genre de chose, j'utiliserais probablement le formatage de chaîne. En PHP, ce serait printf.


?php 
$str="result: %d" 
....dostuff.....define $count..... 
printf($str,$count) 
? 

modifier: bien, la meilleure façon de faire cela dépend sans doute en partie pourquoi vous devez définir $ string avant $ count.

Si c'est une chaîne qui est répétée beaucoup, et que vous vouliez la mettre dans une variable globale ou quelque chose, printf serait mon choix, ou le mettre dans une fonction comme d'autres réponses l'ont suggéré.

Si la chaîne n'est utilisée qu'une ou deux fois, êtes-vous sûr de ne pas pouvoir refactoriser le code pour que $ count soit défini avant $ string?

Enfin, un peu de théorie fade: lorsque vous écrivez '$ string = "résultat: $ count"', PHP prend immédiatement la valeur de $ count et le met dans la chaîne. après cela, il ne s'inquiète plus de $ count, à des fins de $ string, et même si $ count change, $ string ne le sera pas, car il contient une copie littérale de la valeur. Il n'y a pas, autant que je sache, un moyen de lier une position dans une chaîne à une variable à définir. La méthode 'printf' laisse des espaces réservés dans la chaîne, que la fonction printf remplace par des valeurs lorsque vous décidez de ce qui doit figurer dans les espaces réservés.

Donc, si vous vouliez seulement écrire $ string = "résultat: $ count" $ count = 5 $ string écho

(et ne pas avoir à appeler une autre fonction)

et obtenir "résultat: 5", il n'y a aucun moyen de le faire. La méthode la plus proche serait d'utiliser des espaces réservés et printf, mais cela nécessite un appel explicite à une fonction, pas une substitution implicite.

+0

De même, si vous ne voulez pas formater la chaîne, mais ne la produisez pas immédiatement, utilisez sprintf() au lieu de printf(). –

+0

Droite. Pour une raison quelconque, je ne sais pas, j'ai parlé de printf mais lié à sprintf. Peut-être que c'était parce que j'ai écrit la réponse à 23 heures hier soir. :) – YenTheFirst

-2

Quelque chose comme ceci:

$str = preg_replace("/\\$([a-z0-9_]+)/ie", "$\\1", $str); 

Mais si vous ne voulez vraiment pas utiliser une expression régulière, alors vous devrez analyser la chaîne manuellement, extraire le nom de la variable, et le remplacer.

0

Pourquoi n'utilisez-vous pas une fonction?

function result_str($count) { return "result: $count"; } 
Questions connexes