Voici quelque chose d'intéressant que je viens de découvrir concernant str_replace(). Dans ma fonction, j'ai besoin de faire deux requêtes mysql qui sont les mêmes avec un léger changement sur le tri du résultat. Comme argument, j'obtiens une chaîne de caractères contenant une clause d'ordre, par exemple 'nom de famille ASC' mais cela pourrait aussi être 'nom de famille DESC'. Je voulais passer facilement au tri inverse en utilisant str_replace et j'ai pensé que cela ferait l'affaire :
str_replace(array('ASC', 'DESC'), array('DESC', 'ASC'), $subject)
Dans mon esprit, il devrait remplacer toutes les occurrences de ASC par DESC et toutes les occurrences de DESC par ASC. Puisque la chaîne de caractères ne contient qu'un seul de ces deux éléments, je devrais obtenir une clause d'ordre inversé. Cependant, ce n'est pas le cas. Le résultat du code ci-dessus est la même chaîne.
J'ai fait quelques tests et il s'est avéré que ces appels font ce que vous voulez qu'ils fassent :
str_replace('ASC', 'DESC', $subject)
str_replace(array('ASC'), array('DESC'), $subject)
A mon avis, c'est bizarre parce que
array('ASC', 'DESC') != array('DESC', 'ASC')
Pourquoi alors PHP considérerait-il cela comme égal ? Existe-t-il un autre moyen de faire ce type de remplacement facilement ?