[PHP] 'tit bug str_replace
Burnyfighter
-
macgawel Messages postés 676 Statut Membre -
macgawel Messages postés 676 Statut Membre -
Bonjour,
Je rencontre un petit problème avec STR_REPLACE sur un array.
Un peu de code sera plus clair :
$find=array(61,161);
$replace=array(5,6);
$string=array(59,60,61,159,160,161,162);
print_r(str_replace($find,$replace,$string));
et j'obtiens le résultat suivant :
Array (
[0] => 59
[1] => 60
[2] => 5
[3] => 159
[4] => 160
[5] => 15
[6] => 162 )
En bref la fonction commence par remplacer 61 par 5 (c'est normal) mais remplace aussi la partie '61' de 161 par 5-> 161 est donc transformé en 15 et ne passe pas à 6.
Quelqu'un connait-il une astuce pour éviter ce désagréement ???
Merci d'avance
Je rencontre un petit problème avec STR_REPLACE sur un array.
Un peu de code sera plus clair :
$find=array(61,161);
$replace=array(5,6);
$string=array(59,60,61,159,160,161,162);
print_r(str_replace($find,$replace,$string));
et j'obtiens le résultat suivant :
Array (
[0] => 59
[1] => 60
[2] => 5
[3] => 159
[4] => 160
[5] => 15
[6] => 162 )
En bref la fonction commence par remplacer 61 par 5 (c'est normal) mais remplace aussi la partie '61' de 161 par 5-> 161 est donc transformé en 15 et ne passe pas à 6.
Quelqu'un connait-il une astuce pour éviter ce désagréement ???
Merci d'avance
A voir également:
- [PHP] 'tit bug str_replace
- Easy php - Télécharger - Divers Web & Internet
- Bug chromecast - Guide
- Bug localisation snap ✓ - Forum Snapchat
- Expert php pinterest - Télécharger - Langages
- Bug family link - Forum Contrôle parental
2 réponses
Bonjour.
Il n'y a pas de bug, il n'y a qu'une "mauvaise" utilisation de la fonction...
Tu peux essayer avec $find=array(161,61); , ça devrait marcher. Je crois que str_replace lit le tableau $find dans l'ordre, donc en commençant par la chaîne la plus longue, ça devrait passer.
Mais si tu as 1611 dans ton $string, ton résultat sera faux :
1. On remplace le 161 par 6 : 1611 => 61
2. On remplace 61 par 5 : 61 => 5
Ca dépend de ce que tu veux faire, mais il faudrait trouver autre chose. Au minimum, utilise des expressions réguilères.
Il n'y a pas de bug, il n'y a qu'une "mauvaise" utilisation de la fonction...
Tu peux essayer avec $find=array(161,61); , ça devrait marcher. Je crois que str_replace lit le tableau $find dans l'ordre, donc en commençant par la chaîne la plus longue, ça devrait passer.
Mais si tu as 1611 dans ton $string, ton résultat sera faux :
1. On remplace le 161 par 6 : 1611 => 61
2. On remplace 61 par 5 : 61 => 5
Ca dépend de ce que tu veux faire, mais il faudrait trouver autre chose. Au minimum, utilise des expressions réguilères.
je me doutais bien qu'il ne s'agissait pas d'un bug, mais je pensait que str_replace ferait un remplacement par valeur entière (vu qu'ici il s'agit d'entiers) mais en fait il interprète cet entier comme un string (d'ou le STR replace).
Maintenant le souci que je rencontre est qu'en fait mes données ne sont pas ordonnées par ordre croissant et que j'ignore leur valeur vu que c'est un traitement automatique à partir de la BDD.
Je reste toutefois preneur d'une quelconque solution !