Générer un array de plus de 2 400 000 éléments

Publié dans PHP | Marqué avec , ,
Share

Peut-être avez-vous déjà essayé de créer un array très très grand. Moi oui. Mon problème c’est que les valeurs que contenaient mon array étaient aussi très grande. En fait j’ai essayé de générer un array contenant 2 600 000 éléments allant de 1 à 2 600 000.

Naïvement avec une boucle for

 $a_cle = array();
for($i=1;$i<=2600000;$i++) {
   $a_cle[] = $i;
}

Mais là… erreur : Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 16 bytes) in /var/agence.php on line 52

Un peu plus malin avec range()

$a_cle = range(1, 2600000);

Mais là… erreur : Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 16 bytes) in /var/agence.php on line 52

Futé avec array_flip

En fait, je me suis aperçu que ce dont j’avais besoin c’était des numéros que je pouvais prendre au hasard (mais jamais les mêmes) allant de 1 à 2600000, mais pas forcément d’un array avec les clés allant de 1 à 2600000 et les valeurs allant de 1 à 260000. Donc j’ai créé avec array avec des clés allant de 1 à 2600000 et des valeurs toutes à 1.

$a_cle = array_flip($a_cle);
$cle = array_rand($a_cle);
echo $cle; unset($a_cle[$cle]);

Vous me direz que j’aurai pu modifier le php.ini pour augmenter l’espace mémoire utilisable par PHP, mais :

  • je n’y avais pas accès
  • je ne savais comment faire à l’époque :p

Une réponse à Générer un array de plus de 2 400 000 éléments

  1. Flippant cet article… 🙂

    Tableau! Euh… Chapeau!…

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*