PHP remplacer les multiples de valeur à l'aide de str_replace?
J'ai besoin de remplacer les multiples de valeur à l'aide de str_replace.
C'est mon code PHP avant de les remplacer.
$date = str_replace(
array('y', 'm', 'd', 'h', 'i', 's'),
array('Year', 'Month', 'Days', 'Hours', 'Munites', 'Seconds'),
$key
);
Quand je passe la m
dans $key
c'retour de sortie comme.
MontHours
Quand je passe la h
dans $key
c'retour de sortie.
HourSeconds
il renvoie cette valeur, je veux le Month
seulement.
- montrez-nous comment votre utilisation, qui semble être votre aide à nouveau après avoir été utilisé.. c'est à dire m devient mois, puis vous l'exécutez de nouveau le mois devenir monthours parce que le h dans le mois.
- ou ça en boucle pour faire le remplacer, n'est pas à 100% la mise en œuvre de str_replace, mais réarrangement de l'ordre de la lettre dans le premier tableau, peut probablement résoudre ce problème.
Vous devez vous connecter pour publier un commentaire.
À partir de la page de manuel de str_replace():
Par exemple, "m" est remplacé par "Mois", puis le "h" de "Mois" est remplacé par "Heures", qui vient plus tard dans le tableau des remplacements.
strtr() n'a pas ce problème parce qu'il essaie toutes les touches de la même longueur dans le même temps:
Pourquoi ne pas travailler?
C'est un remplacement de chasse aux sorcières qui est mentionné dans la documentation de
str_replace()
:Votre code est équivalent à:
Comme vous pouvez le voir
m
sera remplacé parMonth
, eth
dansMonth
sera remplacé parHours
et las
dansHours
sera remplacé parSeconds
. Le problème est que lorsque vous êtes en remplacement deh
dansMonth
, vous êtes en train de faire, indépendamment de savoir si la chaîneMonth
représente ce qui a été à l'origineMonth
ou de ce qui était à l'origine unem
. Chaquestr_replace()
est de jeter quelques informations — ce que la chaîne d'origine a été.C'est comment vous avez obtenu ce résultat:
La solution
La solution serait d'utiliser
strtr()
parce que qu'il ne changera pas déjà remplacé les caractères.Plus simple solution est de modifier l'ordre de recherche:
str_replace
etpreg_replace
permettra à la fois de la recherche pour chaque élément un à un. Tout multi-valeur devrez vous assurer que l'ordre ne change pas un précédent article de remplacement.