par mere-teresa » 02 nov. 2011, 13:59
par devlop78 » 20 sept. 2011, 18:46
par Nagol » 20 sept. 2011, 18:41
Sans vouloir me venter
par devlop78 » 20 sept. 2011, 18:40
<?php $a = array (5=>'cinq',7=>'sept',2=>'deux'); array_shift($a); var_dump($a);
0 => string 'sept' (length=4) 1 => string 'deux' (length=4)
par devlop78 » 20 sept. 2011, 18:32
par devlop78 » 20 sept. 2011, 18:25
Oki (mon incompréhension était purement syntaxique). On est donc d'accord Enfin, les piles ça se gère pas mal à coup de array_shift/unshift quand même
par Nagol » 20 sept. 2011, 18:21
par popy » 20 sept. 2011, 18:17
par devlop78 » 20 sept. 2011, 18:08
par popy » 20 sept. 2011, 17:54
unset($tab[5]); Un E_NOTICE + 1 null + le dernier oublié
unset($tab[5]);
par devlop78 » 20 sept. 2011, 17:42
par macgawel » 20 sept. 2011, 17:31
Petit benchmark (...) Ce qui montre que le for est plus rapide que le foreach, en revanche le foreach est effectivement moins gourmand en mémoire, bien sur on parle de pas grand chose mais voila.
par devlop78 » 20 sept. 2011, 17:28
par devlop78 » 20 sept. 2011, 17:27
J'ai rajouté le while augmenter la ram le nombre d'occurences et un coup de shuffle <?php ini_set('memory_limit', '1024M'); $truemem = false; $tab = array(); for($i=0; $i<250000; $i++) { array_push($tab, $i); } shuffle($tab); $var = ''; $t1 = microtime(true); $m1 = memory_get_usage($truemem); $ct = count($tab); for($i=0; $i<$ct; $i++) { $var = $i . $tab[$i]; } $t2 = microtime(true); $m2 = memory_get_usage($truemem); $diff1 = $t2 - $t1; $mdiff1 = $m2 - $m1; $var = ''; $t1 = microtime(true); $m1 = memory_get_usage($truemem); foreach($tab as $num=>$i) { $var = $num . $i; } $t2 = microtime(true); $m2 = memory_get_usage($truemem); $diff2 = $t2 - $t1; $mdiff2 = $m2 - $m1; $var = ''; $t1 = microtime(true); $m1 = memory_get_usage($truemem); $ct = count($tab); $i=0; while($i < $ct) { $var = $i . $tab[$i]; $i++; } $t2 = microtime(true); $m2 = memory_get_usage($truemem); $diff3 = $t2 - $t1; $mdiff3 = $m2 - $m1; echo 'for time: '.$diff1.''."\n"; echo 'for mem: '.$mdiff1.''."\n"; echo 'foreach time: '.$diff2.''."\n"; echo 'foreach mem: '.$mdiff2.''."\n"; echo 'while time: '.$diff3.''."\n"; echo 'while mem: '.$mdiff3.''."\n"; for time: 0.10704684257507 for mem: 632 foreach time: 0.093402862548828 foreach mem: 136 while time: 0.1063129901886 while mem: 88 avantage à foreach, mais pas un gros avantage, je vais voir si je peut trouver un cas ou le foreach est moins bon, en jouant sur ce qui se passe à l'intérieur des boucles.
<?php ini_set('memory_limit', '1024M'); $truemem = false; $tab = array(); for($i=0; $i<250000; $i++) { array_push($tab, $i); } shuffle($tab); $var = ''; $t1 = microtime(true); $m1 = memory_get_usage($truemem); $ct = count($tab); for($i=0; $i<$ct; $i++) { $var = $i . $tab[$i]; } $t2 = microtime(true); $m2 = memory_get_usage($truemem); $diff1 = $t2 - $t1; $mdiff1 = $m2 - $m1; $var = ''; $t1 = microtime(true); $m1 = memory_get_usage($truemem); foreach($tab as $num=>$i) { $var = $num . $i; } $t2 = microtime(true); $m2 = memory_get_usage($truemem); $diff2 = $t2 - $t1; $mdiff2 = $m2 - $m1; $var = ''; $t1 = microtime(true); $m1 = memory_get_usage($truemem); $ct = count($tab); $i=0; while($i < $ct) { $var = $i . $tab[$i]; $i++; } $t2 = microtime(true); $m2 = memory_get_usage($truemem); $diff3 = $t2 - $t1; $mdiff3 = $m2 - $m1; echo 'for time: '.$diff1.''."\n"; echo 'for mem: '.$mdiff1.''."\n"; echo 'foreach time: '.$diff2.''."\n"; echo 'foreach mem: '.$mdiff2.''."\n"; echo 'while time: '.$diff3.''."\n"; echo 'while mem: '.$mdiff3.''."\n";
for time: 0.10704684257507 for mem: 632 foreach time: 0.093402862548828 foreach mem: 136 while time: 0.1063129901886 while mem: 88
par devlop78 » 20 sept. 2011, 17:24
Petit benchmark <?php $tab = array(); for($i=0; $i<250000; $i++) { array_push($tab, $i); } $var = ''; $t1 = microtime(true); $m1 = memory_get_usage(); $ct = count($tab); for($i=0; $i<$ct; $i++) { $var .= $i; } $t2 = microtime(true); $m2 = memory_get_usage(); $diff1 = $t2 - $t1; $mdiff1 = $m2 - $m1; $var = ''; $t1 = microtime(true); $m1 = memory_get_usage(); foreach($tab as $i) { $var .= $i; } $t2 = microtime(true); $m2 = memory_get_usage(); $diff2 = $t2 - $t1; $mdiff2 = $m2 - $m1; echo 'for time: '.$diff1.''."\n"; echo 'for mem: '.$mdiff1.''."\n"; echo 'foreach time: '.$diff2.''."\n"; echo 'foreach mem: '.$mdiff2.''."\n"; Mes résultats sont sensiblement constants un exemple de résultat serait: for time: 0.03811502456665 for mem: 1389512 foreach time: 0.040256023406982 foreach mem: 1388808 Ce qui montre que le for est plus rapide que le foreach, en revanche le foreach est effectivement moins gourmand en mémoire, bien sur on parle de pas grand chose mais voila.
<?php $tab = array(); for($i=0; $i<250000; $i++) { array_push($tab, $i); } $var = ''; $t1 = microtime(true); $m1 = memory_get_usage(); $ct = count($tab); for($i=0; $i<$ct; $i++) { $var .= $i; } $t2 = microtime(true); $m2 = memory_get_usage(); $diff1 = $t2 - $t1; $mdiff1 = $m2 - $m1; $var = ''; $t1 = microtime(true); $m1 = memory_get_usage(); foreach($tab as $i) { $var .= $i; } $t2 = microtime(true); $m2 = memory_get_usage(); $diff2 = $t2 - $t1; $mdiff2 = $m2 - $m1; echo 'for time: '.$diff1.''."\n"; echo 'for mem: '.$mdiff1.''."\n"; echo 'foreach time: '.$diff2.''."\n"; echo 'foreach mem: '.$mdiff2.''."\n";
for time: 0.03811502456665 for mem: 1389512 foreach time: 0.040256023406982 foreach mem: 1388808