3
votes

Remplacer une chaîne simple par un caractère

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 "


2 commentaires

"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.


4 Réponses :


5
votes

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.


3 commentaires

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?



3
votes

Vous pouvez utiliser 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

Depuis le manuel PHP: vsprintf () Fonctionne comme sprintf () mais accepte plutôt un tableau d'arguments qu'un nombre variable d'arguments.

Ci-dessus est une solution, mais comment pouvez-vous changer le ? de votre chaîne, ici vous pouvez utiliser str_replace () code > à remplacer par %s.


0 commentaires

1
votes

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]);


0 commentaires

2
votes

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;


1 commentaires

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