Chercher une chaine dans un tableau PHP

Chercher une chaine dans un tableau PHP - PHP - Programmation

Marsh Posté le 10-06-2004 à 16:42:52    

Voici deux méthodes fraichement codées.  
On retourne la ligne d'un fichier texte qui contient notre chaine.
 
Laquelle demande le moins de mémoire pour s'éxecuter ? Ya t'il de meilleures méthodes ?
 
1ere :

Code :
  1. $i = 0;
  2. while(!feof($fp))
  3. {
  4. $lignes[i] = fgets($fp, 1024);
  5. if( ($res = stristr($lignes[i], $mot_cherche)) !=FALSE )
  6. return lignes[i];
  7. i++;
  8. }
  9. fclose($fp);


 
2eme :
 

Code :
  1. while(!feof($fp))
  2. {
  3. $lignes[] = fgets($fp, 1024);
  4. }
  5. fclose($fp);
  6. $i= 0;
  7. while( $i < count($lignes) )
  8. {
  9. if( ($res = stristr($lignes[i], $mot_cherche)) !=FALSE )
  10. return lignes[i];
  11. i++;
  12. }


 
Ca sera utilisé comme moteur de recherche. On peut peut etre l'améliorer avec des tables de hachages ou bien un autre algo de recherche.
Je sais pas trop comment m'y prendre  :(  
 
Thx


Message édité par joelan le 10-06-2004 à 16:46:28
Reply

Marsh Posté le 10-06-2004 à 16:42:52   

Reply

Marsh Posté le 10-06-2004 à 16:52:44    

pourquoi ne pas faire:
if( stristr($lignes[i], $mot_cherche) !== FALSE )  
 
plutôt?
 
et là tu retournes pas vraiment une ligne du fichier mais plutôt un bloc de 1024, mais c'est peut-être ce que tu cherhes [:proy]


Message édité par dropsy le 10-06-2004 à 16:53:06
Reply

Marsh Posté le 10-06-2004 à 17:05:01    

bah si j 'ai bien lu la doc PHP, stristr retourne une sous chaine de  $lignes[i].  
 
Moi j ai besoin de la ligne qui contient toutes les informations qu il me faut. Il faut que la recherche soit rapide et ne demande pas trop de ressources.
 
En fait ma question porte plutot sur l 'efficacité de ces algos. Ou bien d 'autres si quelqu'un a mieux a proposer

Reply

Marsh Posté le 10-06-2004 à 17:32:27    

la fonction array_keys() me semble pas mal pour ce genre d'utilisation.


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 10-06-2004 à 17:43:59    

joelan a écrit :

bah si j 'ai bien lu la doc PHP, stristr retourne une sous chaine de  $lignes[i].  


rejette donc un petit coup d'oeil à la doc ;)
http://fr.php.net/manual/fr/function.stristr.php
le fonctionne retourne FALSE quand elle ne trouve pas la chaine de caractère
 
de plus j'ai aussi retiré l'affectation à la variable $res que tu n'as pas l'air d'utiliser après.
 

joelan a écrit :


Moi j ai besoin de la ligne qui contient toutes les informations qu il me faut. Il faut que la recherche soit rapide et ne demande pas trop de ressources.


avec ton script, si la ligne est plus longue que 1024 octets, elle sera tronquée dans ton résultat

Reply

Marsh Posté le 10-06-2004 à 18:02:03    

Bah c kler j ai pas donné la structure sur laquelle je travaillais.  
Ca sera un fichier texte :
 
champs11 champs12 ... champs1N  << 1024
.
.
champsN1.............. champs NN
 
il y aura pas plus de 100 000 lignes
 

Citation :

array_keys()

 
 
we j'imagine que l'algo est top, j ve tenter de coder çà
 
Au niveau de l'occupation mémoire, de la fiabilité ya des suggestions ?


Message édité par joelan le 10-06-2004 à 18:05:15
Reply

Marsh Posté le 10-06-2004 à 18:22:51    

We bah avec array_keys ca donne:
 

Code :
  1. while(!feof($fp))
  2. {
  3. $lignes[] = fgets($fp, 1024);
  4. }
  5. fclose($fp);
  6. $array = array_keys($lignes, $mot_cherche);


 
C court ! :lol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed