Fichier, tableau, suivant et precedent [Résolu]

Signaler
Messages postés
4
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
11 mai 2005
-
Messages postés
15
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
7 avril 2007
-
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

Messages postés
15
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
7 avril 2007

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, à + !
Messages postés
66
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
10 mai 2005

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 :)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Oui c'est beaucoup plus simple lol...et c'est la meme idee.
Messages postés
4
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
11 mai 2005

Je ne vois pas comment placer la boucle for, peux tu m'eclairer un peu. Merci d'avance !
Messages postés
66
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
10 mai 2005

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
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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...