Maison  >  Questions et réponses  >  le corps du texte

Évitez de remplacer les chaînes à plusieurs reprises, remplacez-les une seule fois

J'essaie de remplacer une chaîne mais ça fonctionne comme une boucle

$especiais = ["b", "c", "k", "g", "j", "d", "f", "a", "e", "m", "i", "y", "h", "l", "p", "q", "n", "x", "o", "r", "z", "u", "v", "w", "s", "t"];

$certo =  ["pn", "veh", "veh", "ged", "ged", "gal", "or", "un", "graph", "tal", "gon", "gon", "na", "ur", "mals", "ger", "drux", "pal", "med", "don", "ceph", "van", "van", "van", "fam", "gisg"];

$resultado = str_replace($especiais, $certo, $phrase);

Exemple de code renvoie : OL renvoie medvanandon

Le résultat exact dont j'ai besoin est OL revient MEDUR

J'ai besoin que chaque lettre soit remplacée exactement par la lettre correspondante, mais dans ce code, le remplacement est répété plusieurs fois.

P粉257342166P粉257342166432 Il y a quelques jours650

répondre à tous(1)je répondrai

  • P粉021553460

    P粉0215534602023-09-07 00:38:42

    Il y a un avis dans la documentation str_replace() PHP qui dit :

    Je recommande plutôt d'utiliser strtr(), qui permet de passer un tableau "de remplacement" au format (de => à), comme dans l'exemple suivant :

    $replace = [
        'b' => 'pn',
        'c' => 'veh',
        'k' => 'veh',
        'g' => 'ged',
        'j' => 'ged',
        'd' => 'gal',
        'f' => 'or',
        'a' => 'un',
        'e' => 'graph',
        'm' => 'tal',
        'i' => 'gon',
        'y' => 'gon',
        'h' => 'na',
        'l' => 'ur',
        'p' => 'mals',
        'q' => 'ger',
        'n' => 'drux',
        'x' => 'pal',
        'o' => 'med',
        'r' => 'don',
        'z' => 'ceph',
        'u' => 'van',
        'v' => 'van',
        'w' => 'van',
        's' => 'fam',
        't' => 'gisg',
    ];
    
    $phrase = 'ol';
    
    echo strtr($phrase, $replace);

    Cela vous donnera le résultat que vous attendez, comme indiqué ci-dessous :

    medur

    Démo : https://tehplayground.com/5YSxPYZfreiPTz9K

    répondre
    0
  • Annulerrépondre