Peut etre vous etes vous deja retrouvé dans la situation ou vous devez enregistrer dans un tableaux plusieurs milliers d'entrées.
Le problème pour moi c'est posé, j'ai donc décidé de mette ce tableau dans un fichier.
Autant prévenir de suite, cette solution offre le désavantage d'etre très lent, mais d'un autre coté, elle préserve les ressources mémoire allouées a php, ce que je désirai.
De plus, j'ai prévu un switch entre gestion par fichier et gestion en mémoire, au cas ou ;)
Prérequis:
Il faut impérativement accés a une commande grep, en effet, cette classe lors de la lecture du tableau vient 'greper' le fichier pour trouver la ligne qui l'interresse.
Le concept:
En instanciant la class ArrayFile, on créé un fichier dans le répertoire temporaire de votre choix. Le stockage d'une variable dans ce tableau se fait par la methode add. Cette methode ecrit dans le fichier une ligne représentant l'index/key du tableau, et sa variable sérializée.
La lecture se fait par la methode get tout simplement.
Ex:
//note: le nom du tableau n'est pas obligatoire, mais il peut s'avérer interressant de retrouver le fichier que l'on a creer
$monBeauTableau = new ArrayFile('monTableau');
//ici pas besoin d'index, on incrémente automatiquement
$monBeauTableau->add('ma premiere valeur');
//ici on force l'index (15)
$monBeauTableau->add('ma seconde valeur avec un index définit',15);
//valeur index par une clé type string (cleTrois)
$monBeauTableau->add('ma troisième valeur avec clé','cleTrois');
Un accés directe a une valeur pourra etre possible via l'instruction 'get':
echo $monBeauTableau->get('cleTrois');
// resultat : ma troisième valeur avec clé
echo $monBeauTableau->get(15);
// resultat : 'ma seconde valeur avec un index définit'
Enfin, pour lister la totalité d'un tableau un simple foreachLine:
while(list($key,$value) = $monBeauTableau->foreachLine()){
echo "key = $key ";
print_r($value)."\n";
}
//unset du tableau
$monBeauTableau->unsetArray();
Un cas particulier:
si plusieurs add sont fait sur la meme clé, le get de cette clé renverra toutes les valeurs de cette clé.
Pour retourner, la dernière valeur, il faut utiliser la methode 'getUniq' au lieu de 'get'.