Ce script va me permettre d'assigner un numero ALEATOIRE ET UNIQUE a chaque news contenu dans un fichier.
J'appelle ensuite ces news par leur numéro dans l'ordre croissant pour les afficher.
L'utilité de ce script est que les news n'apparaitront jamais dans le meme ordre.
(Ca parait con mais ce script va me servir dans d'autres applications...)
Voici mon script :
Enregistrez d'abord ce qui suit dans un fichier txt :
http://serveur/pagex.php
Ceci est la news n°A
http://serveur/pagex.php
Ceci est la news n°B
http://serveur/pagex.php
Ceci est la news n°C
http://serveur/pagex.php
Ceci est la news n°D
Voici maintenant le script :
(mettez le ds un éditeur vous y verrez plus clair...)
<font face = verdana size=2>
<?php
// PREMIERE PARTIE DU SCRIPT
// Elle assigne chaque news et chaque url a une variable et compte le nombre total de news
$ne = 0;
$fd = fopen ("news.txt", "r" );
while (!feof($fd)) {
if ($ne % 2 == 0) {
${'url'.$ne} = fgets($fd);
${'rurl'.$ne} = rtrim(${'url'.$ne});
} else {
${'news'.$ne} = fgets($fd);
${'rnews'.$ne} = rtrim(${'news'.$ne});
}
$ne++;
}
fclose ($fd);
$nblignes = $ne;
$nbnews = $nblignes / 2;
echo"<h3>il y a $nbnews news</h3><br><br>";
// FIN DE LA PREMIERE PARTIE
?>
<?php
// DEUXIEME PARTIE DU SCRIPT
// elle donne un numéro aléatoire UNIQUE à chaque news
// Initialisation des variables
$bl = 0;
$ze = 1;
$np = 1;
$zee = 0;
$zi = 0;
// Boucle principale qui assigne un numéro aléatoire unique a chaque news
while ($ze <= $nbnews) {
// numero de la news contenue dans la variable qui suit...
${'rdm'.$zee} = rand('0', "$nbnews" );
echo"<li type=square><b>N° de la news : <font size=4 color=blue><b>${'rdm'.$zee}</b></font>";
// Génération de la condition -- La condition varie suivant le nombre de passage de la boucle principale
// Initialisation des variables
$inc = 0;
$rg = 1;
${'cod'.$inc} = " \${'rdm'.\$zee} == \${'rdm'.(\$zee - $rg)} ";
$inc++;
$rg++;
// Début de la boucle qui génère la condition
while ($inc <= $zee) {
${'cod'.$zee} = " ${'cod'.($zee - 1)} || \${'rdm'.\$zee} == \${'rdm'.(\$zee - $rg)} ";
$rg++;
$inc++;
}
$condition = "${'cod'.($inc - 1)}";
// Fin de la génération de la condition
echo"<br><b>Condition : $condition</b>";
if ($zee == 0) {
echo "<br>>> osp_scroll_message[<font color=blue>${'rdm'.$zi}</font>]='<a class=news href=${'rurl'.$bl}><b>${'rnews'.$np}</a>';<br><br>";
$ze++;
$np++;
$np++;
$bl++;
$bl++;
$zi++;
$zee++;
$rg++;
$inc++;
// LE PROBLEME EST ICI -- Je veux juste que la condition soit celle générée ci dessus
// Ici je l'ai écrite manuellement mais elle ne varie pas en fonction du nombre de passage de la boucle principale
// Dans cet exemple la condition n'est valable que pour un nombre de passages de la boucle inférieur à 22
} elseif (${'rdm'.$zee} == ${'rdm'.($zee - 1)} || ${'rdm'.$zee} == ${'rdm'.($zee - 2)} || ${'rdm'.$zee} == ${'rdm'.($zee - 3)} || ${'rdm'.$zee} == ${'rdm'.($zee - 4)} || ${'rdm'.$zee} == ${'rdm'.($zee - 5)} || ${'rdm'.$zee} == ${'rdm'.($zee - 6)} || ${'rdm'.$zee} == ${'rdm'.($zee - 7)} || ${'rdm'.$zee} == ${'rdm'.($zee - 8)} || ${'rdm'.$zee} == ${'rdm'.($zee - 9)} || ${'rdm'.$zee} == ${'rdm'.($zee - 10)} || ${'rdm'.$zee} == ${'rdm'.($zee - 11)} || ${'rdm'.$zee} == ${'rdm'.($zee - 12)} || ${'rdm'.$zee} == ${'rdm'.($zee - 13)} || ${'rdm'.$zee} == ${'rdm'.($zee - 14)} || ${'rdm'.$zee} == ${'rdm'.($zee - 15)} || ${'rdm'.$zee} == ${'rdm'.($zee - 16)} || ${'rdm'.$zee} == ${'rdm'.($zee - 17)} || ${'rdm'.$zee} == ${'rdm'.($zee - 18)} || ${'rdm'.$zee} == ${'rdm'.($zee - 19)} || ${'rdm'.$zee} == ${'rdm'.($zee - 20)} || ${'rdm'.$zee} == ${'rdm'.($zee - 21)}
) {
echo"<font color=red><br>## ${'rdm'.$zee} est une valeur déja utilisée ! ##</font><br><br>";
$zee++;
} else {
echo "<br>>> osp_scroll_message[<font color=orange>${'rdm'.$zi}</font>]='<a class=news href=${'rurl'.$bl}><b>${'rnews'.$np}</a>';<br><br>";
$ze++;
$np++;
$np++;
$bl++;
$bl++;
$zi++;
$zee++;
$rg++;
$inc++;
}
}
// FIN DE LA SECONDE PARTIE
?>
Exécutez maintenant ce scrip dans un navigateur, ca va vous éclairer sur le fonctionnement du script.
Tout fonctionne à merveille mais ma seule question est :
Quel est le moyen de mettre l'expression contenue dans la variable $condition dans elseif( ) ??
(voir code ci dessus)
Merci de votre aide
Message édité par Kmikaz le 27-06-2003 à 15:36:18