while (list($key,$value) = each($array))
ou foreach
?
$array['key']
- $array[key]
str_replace
: plusieurs appels ou avec des tableaux ?file_exists
ou is_file
?str_replace
: plusieurs appels ou avec des tableaux ?La fonction str_replace
accepte des tableaux en paramètres, elle fait alors un remplacement pour chaque élément du
tableau de départ par l'élément correspondant du tableau d'arrivée. Ainsi :
<?php $a = str_replace('x','y',$a); $a = str_replace('a','b',$a);?>
est équivalent à
<?php $a = str_replace(array('x','a'),array('y','b'),$a); ?>
Lequel est le plus rapide ?
On commence avec $a = 'abcxyz';
TEST 1 --- plusieurs appels de str_replace
<?php $a = str_replace('x','y',$a); $a = str_replace('a','b',$a);?>
Résultat : $a=bbcyyz
Durée: 0.05775 s, Vitesse: 1731631 fois par seconde
TEST 2 --- plusieurs appels mais imbriqués
<?php $a = str_replace('x','y', str_replace('a','b',$a));?>
Résultat : $a=bbcyyz
Durée: 0.0485 s, Vitesse: 2061904 fois par seconde
TEST 3 --- Un seul appel avec des tableaux
<?php $a = str_replace(array('x','a'), array('y','b'), $a); ?>
Résultat : $a=bbcyyz
Durée: 0.06719 s, Vitesse: 1488339 fois par seconde
TEST 4 --- et si les tableaux sont initialisés avant... ?
<?php $t1 = array('x','a');\n$t1 = array('y','b');
$a = str_replace($t1, $t2, $a); ?>
Résultat : $a=bbcyyz
Durée: 0.06638 s, Vitesse: 1506477 fois par seconde
On continue avec une chaîne plus longue et plus de remplacements.
$a = 'Hello ! abcdefghijklmnopqrstuvwxyz';
à remplacer en 'Bonjour ! ABCDEDFGHIJKLMNOPQRSTUVWXYZ'
TEST 5 --- plusieurs appels de str_replace
<?php $a = str_replace('Hello','Bonjour',$a); $a = str_replace('a','A',$a);... ?>
Résultat : $a=BONJOUR ! ABCDEFGHIJKLMNOPQRSTUVWXYZ
Durée: 0.66881 s, Vitesse: 149519 fois par seconde
TEST 6 --- plusieurs appels mais imbriqués
<?php $a = str_replace('Hello','Bonjour', str_replace('a','A',... $a));?>
Résultat : $a=HELLO ! ABCDEFGHIJKLMNOPQRSTUVWXYZ
Durée: 0.49559 s, Vitesse: 201780 fois par seconde
Heu... Là on voit un petit soucis... dans cette écriture imbriquée, il faut faire attention
à mettre le premier remplacement en dernier !
TEST 7 --- Un seul appel avec des tableaux
<?php $a = str_replace(array('Hello','a','b',...), array('Bonjour','A','B'), $a); ?>
Résultat : $a=BONJOUR ! ABCDEFGHIJKLMNOPqRSTUVWXYZ
Durée: 0.43456 s, Vitesse: 230120 fois par seconde
TEST 8 --- et si les tableaux sont initialisés avant... ?
<?php $t1 = array('Hello','a'...);\n$t1 = array('Bonjour','A'...);
$a = str_replace($t1, $t2, $a); ?>
Résultat : $a=BONJOUR ! ABCDEFGHIJKLMNOPqRSTUVWXYZ
Durée: 0.34367 s, Vitesse: 290979 fois par seconde
Pour de petits remplacements (du genre remplacer 3 caractères par 3 autres caractères)
il est conseillé de ne pas utiliser des tableaux et d'imbriquer les str_replace
(test 2), mais le code devient vite illisible et source d'erreur (test 6).
Pour plus de remplacements, il est plus rapide d'utiliser des tableaux, même si
l'instanciation d'un array prend un peu du temps.
Ces tests (surtout la 2e série) sont volontairement bidons, un strtoupper
aurait fait l'affaire, ou au pire un strtr
!
Voyons voir ça, un strtr
:
TEST 9 --- strtr
<?php $a = strtr(str_replace('Hello', 'Bonjour', $a), 'abc...xyz', 'ABC...XYZ'); ?>
Résultat : $a=BONJOUR ! ABCDEFGHIJKLMNOPQRSTUVWXYZ
Durée: 0.06405 s, Vitesse: 1561229 fois par seconde