Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2007, 23h28   #1
Membre actif
 
Avatar de renaudjuif
 
Inscription : avril 2006
Messages : 300
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 300
Points : 174
Points : 174
Par défaut [CSV] Optimiser mon script

Bonjour à tous,

je suis sur un projet où il y a de gros traitements:
Je récupère des milliers de lignes d'un fichier genre csv, et je dois identifier chaque ligne en retrouvant un champ de la ligne csv dans une table de ma bdd.
Le process pour l'instant est le suivant:

1. je charge tous les champs de la BDD dans 1 tableau unidimensionnel php
2. j'ouvre le fichier csv
3. je parcours chaque ligne de mon fichier, récupère le champ à vérifier, et le compare avec mon tableau php (avec array_search()).

mon tableau php a + de 4000 indices, donc à chaque vérif je parcours ce tableau jusqu'à ce que je tombe sur la valeur identique...

Qu'est-ce qui est le plus rapide ? parcourir un tableau php, ou un accès à la base ? ou mieux encore si vous avez des idées

Merci pour vos avis.
renaudjuif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2007, 00h27   #2
Modérateur
 
Avatar de Rakken
 
Inscription : août 2006
Messages : 1 207
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 207
Points : 1 137
Points : 1 137
Parcourir le tableau ou la base... Naturellement je dirait le tableau, mais j'ai déjà été surpris, notamment, si tu mets un index sur le champ de ta base que tu dois tester.

A la rigeur, plutot que de parcourir ton tableau avec array_search, tu peux tenter d'optimiser un peu la chose en "classant" d'abord ton tableau par ordre alphabétique, ce te permetra une recherche dichotomique.
Tu cherches au milieu de ton tableau (si tu as 4000 entrée, tu regardes directement l'entrée 2000) et tu regarde si la valeur est alphabétiquement parlant plus grande, plus petite, ou égale. Si elle est plus grande, tu recherche au milieu de la moitié qui reste, soit entre 2000 et 4000 = l'entrée 3000.
Si elle est égale, t'as trouvé, c'est bon. Si elle est plus petite, tu fait pareil avec l'autre moitié, et ainsi de suite. Le nombre d'accés a ton tableau est au max une puissance de 2 contenant l'intégralité de ton tableau, genre pour 4000 entrée, ca doit faire 2^12, donc 12 itérations max avant de trouver ta valeur ou d'être sur qu'elle n'est pas là.
__________________
Rakken

Oneira, un monde imaginaire d'Heroic Fantasy.

Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/
Rakken est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2007, 11h22   #3
Membre actif
 
Avatar de renaudjuif
 
Inscription : avril 2006
Messages : 300
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 300
Points : 174
Points : 174
Merci pour ta réponse Rakken,

Ca me va bien, je vais effectivement optimiser la recherche dans le tableau php en suivant l'algo que tu cites.
renaudjuif est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h45.


 
 
 
 
Partenaires

Hébergement Web