J'ai une chaîne telle que:
`Hello "Geroge" My name is "Jonathan" I am "35" years old`
Et j'ai un tableau tel que:
['George','Jonathan',35]
J'aimerais un résultat de combiner et de renvoyer:
"Hello ? My name is ? I am ? years old"
Comment puis-je accomplir cela en php?
J'ai essayé d'utiliser str_ireplace mais il a dit " conversion de tableau en chaîne "
4 Réponses :
Si vous êtes en mesure de changer la façon dont vous définissez les espaces réservés dans votre chaîne, vous devez utiliser sprintf . Consultez le manuel .
Exemple simple: p >
$variables = ['George', 'Jonathan', 35];
$result = sprintf("Hello %s My name is %s I am %d years old", ...$variables);
Dans votre cas, vous pouvez utiliser l'opérateur splat (php> = 5.6) pour passer les variables:
$result = sprintf("Hello %s My name is %s I am %d years old", 'George', 'Jonathan', 35);
Comme d'autres l'ont souligné, la fonction vsprintf peut être un meilleur moyen. Voir la réponse de devpro.
Sauf "j'ai un tableau" .... vous avez des chaînes explicites qui sont permutées. Comment faire avec un tableau de valeurs ?
vsprintf existe également.
Comment cela implique-t-il une chaîne avec ? comme espaces réservés?
Vous pouvez utiliser Depuis le manuel PHP: Ci-dessus est une solution, mais comment pouvez-vous changer le vsprintf () a> parce que vous voulez le remplacer par un tableau: <?php
$array = ['George','Jonathan',35];
$content = vsprintf("Hello %s My name is %s I am %s years old", $array);
echo $content; // Hello George My name is Jonathan I am 35 years old
vsprintf () Fonctionne comme sprintf () mais accepte plutôt un tableau d'arguments qu'un nombre variable d'arguments. ? de votre chaîne, ici vous pouvez utiliser str_replace () code > à remplacer par %s.
Pour définir un tableau de variables, vous pouvez utiliser call_user_func_array :
<?php
call_user_func_array('sprintf', ['Hello %s My name is %s I am %d years old', 'George', 'Jonathan', 35]);
J'essaierais quelque chose comme ça. Vous pouvez toujours utiliser ? comme point d'interrogation. De plus, les types et le montant ne sont pas fixes.
<?php
function insert($values, $string) {
$string = str_replace(
[' ? ', '? ', ' ?'],
[' %s ', '%s ', ' %s'],
$string
);
return vsprintf($string, $values);
}
$string = "Hello ?. My name is ? I am ? years old. How are you?";
$values = ['you', 'Dan', '+- 30'];
// Prints: Hello you. My name is Dan I am +- 30 years old. How are you?
echo insert($values, $string), PHP_EOL;
// Prints: Nice nice!
echo insert(['nice'], 'Nice ?!'), PHP_EOL;
bon, comme ça .. vote pour toi, en fait tu as mentionné le bon point, à propos de ? donc je mets juste à jour ma réponse aussi .. merci
"J'ai essayé d'utiliser ..." - "mais il a dit" ... alors, les détails comptent. str_ireplace fonctionnerait, en fait - mais comment vous avez "essayé d'utiliser" cela fait la différence. Veuillez envisager d'ajouter un exemple reproductible minimal
vérifiez toutes les solutions et acceptez la meilleure.