Flocons de Pâques

Astuces de programmation

PHP : array_shift

 2006-10-27

(English follows)

La fonction PHP array_shift peut être assez gourmande en ressources processeur. Quand c'est possible, vous devriez utiliser array_slice à la place

Considerez le code suivant  :

$monthlyHits = 0;
reset ($hitsArray);
foreach($hitsArray as $visitTime ) {
if ($visitTime < $monthStart ) {
array_shift($hitsArray);
$monthlyHits++;
}
}

Il peut être remplacé par :
$monthlyHits = 0;
reset ($hitsArray);
foreach($hitsArray as $visitTime ) {
if ($visitTime < $monthStart ) {
$monthlyHits++;
}
}
$monthlyHits = array_slice($hitsArray,$monthlyHits);

Voici le résultat d'un test que j'ai effectué sur un tableau de 10000 lignes :
Première méthode, 9000 milisecondes.
Seconde methode, 4 milisecondes.


English :

Note that array_shift can be rather time consuming. Whenever possible, you should consider using array_slice instead.

Consider the following code :

$monthlyHits = 0;
reset ($hitsArray);
foreach($hitsArray as $visitTime ) {
if ($visitTime < $monthStart ) {
array_shift($hitsArray);
$monthlyHits++;
}
}

This could be replaced by :
$monthlyHits = 0;
reset ($hitsArray);
foreach($hitsArray as $visitTime ) {
if ($visitTime < $monthStart ) {
$monthlyHits++;
}
}
$monthlyHits = array_slice($hitsArray,$monthlyHits);

Here is a benchmark I did on a 10 000 rows array :
First method, 9000 mili-seconds.
Second method, 4 mili-seconds