Fichier, tableau, suivant et precedent

Résolu
kdos Messages postés 4 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 11 mai 2005 - 10 mai 2005 à 14:40
cs_pitchoune Messages postés 15 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 7 avril 2007 - 13 mai 2005 à 18:27
Bonjour ami lecteur,


Enoncé du probleme :
___________________


Soit un fichier texte intitulé news.txt de la forme suivante :
ID de la news|Titre de la news|Resumé de la news|


J'aimerais construire une fonction qui me retournerais en fonction de l'ID de la news recherchée les informations suivantes :
- son titre
- son resumé
- l'ID de la news qui la precede
- l'ID de la news qui la suit


J'arrive a recuperer les deux premieres informations avec une fonction du type:


function lct($id)
{
$fl=file('news.txt');
foreach($fl as $ln)
{
$mb=explode('|',$ln);
if($mb[0]==$id) {$titre=$mb[1]; $resume=$mb[2];}
}
return array($titre,$resume);
}


Quelqu'un saurait-il comment recuperer les deux dernieres informations ? Merci d'avance.

6 réponses

cs_pitchoune Messages postés 15 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 7 avril 2007
13 mai 2005 à 18:27
Salut, je te propose la solution suivante :

function lct($id)
{
$trv=FALSE;



$fl=file('news.txt');
//trie le fichier en fonction de tes ID
sort($fl);
reset($fl);
//Compte le nombre de ligne de ton fichier
$nb=count($fl);

//Boucle permettant d'identifier la ligne de l'ID recherchée

for($i=0;$i<$nb;$i++)
{
if(strpos($fl[$i],$id)===0) { $trv=TRUE; break;}
else{continue;}
}

if($trv==TRUE)
{
//ID precedente (nulle si l'ID recherchée correspond à la premiere ligne du fichier)

if($i!=0) {$lp=explode('|',$fl[$i-1]); $idp=$lp[0];} else {$idp='';}
//ID suivante (nulle si l'ID recherchée correspond à la derniere ligne du fichier)

if($i!=$nb-1) {$ln=explode('|',$fl[$i+1]); $idn=$ln[0];} else {$idn='';}
}
else {$idp=''; $idn='';}

return array($idp,$idn);
}

J'espere avoir pu t'aider, à + !
3
Azdruyel Messages postés 66 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 10 mai 2005
10 mai 2005 à 14:59
Salut :)



Au lieu de faire un foreach, si tu faisais une boucle for ou ton $i
represente la ligne que tu es en train de lire. Au moment ou tu trouves
la ligne qui t'interesse, tu as juste a lire la ligne $i-1 pour avoir
la precedente et $i+1 pour la suivante, et donc avoir ta news
precedante et ta news suivante.



Bonne chance :)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 15:24
Oui c'est beaucoup plus simple lol...et c'est la meme idee.
0
kdos Messages postés 4 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 11 mai 2005
11 mai 2005 à 00:02
Je ne vois pas comment placer la boucle for, peux tu m'eclairer un peu. Merci d'avance !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Azdruyel Messages postés 66 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 10 mai 2005
11 mai 2005 à 08:43
au lieu d'une boucle for comme je disais au debut, le plus simple est une boucle while. Voila comment je ferai :)

$file est le fichier dans lequel tu cherches ton info
$data est la donnée que tu recherches
$compt est un compteur initialiser a 0
$trouve est un booleen initialise a false qui te permet de savoir si ta valeur est trouve dans le fichier, comme ca quand tu ressors de ta boucle while, tu sais si tu sors parce que tu as trouve la valeur ou bien parce que tu as lu tout ton fichier sans rien trouver

while(($ligne=fgets($file))!=''){
if($ligne==$data){
echo 'c\'est bon!!!';
$trouve=true;
break;
}
else{
$compteur++;
}
}

//quand tu sors de la boucle, tu verifies si $trouve==true, et dans se cas la tu lis ton fichier jusqu'a $compteur-1 pour la ligne avant et $compteur+1 pour la ligne apres avec des boucles while

//par exemple

$compteurcourante=0
while($compteurcourant!=$compteur-1){
$lignecourante=fgets($file);
$compteurcourant++;
}
//quand tu ressors de la boucle tu as la ligne avant celle que tu recerchais au debut

Voila, si jamais ca va pas, bah on cherchera autre chose
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 mai 2005 à 08:57
Hello,



finalement je trouve ma solution plus simple, lol (dans ton autre post...juste avant celui-ci), et surtout plus souple.

Le principe : lire ton fichier, l'exploser.

Puis scinder le tableau obtenu en un nouveau tableau multidimensionnel
associatif ou non (selon les gouts), du genre (par exemple)

$tableau array ('id'> array ('titre' => '...', 'resume' = '...'));

ou ce que je t'ai montre (mais c'etait adapte a mon script) :

$tableau array ('id'> array (), 'titre' => array (), 'resume' => array ());



Pour scinder un tableau, il suffit de le parcourir et d'utiliser un
modulo pour recuperer part exemple les clefs 0, 2, 4..., puis 1, 3,
5... puis 2, 5, 7...et les remettre dans ton nouveau tableau.

Apres, se promener dedans devient tres simple grace aux fonctions in_array(), array_search() etc...
0
Rejoignez-nous