Probleme fonction rand

Fermé
kepsylis - 27 oct. 2009 à 14:59
 pacorabanix - 28 oct. 2009 à 18:08
Bonjour,
Voila j'aimerais savoir comment utilise la fonction rand en php dans mon cas.

Mon but:
J'affiche 3 articles en haut de page et j'aimerais qu'il soit afficher au hasard. C'est a dire parmi la liste des article, la fonction rand m'affiche 3 article différent et qu'a chaque actualisation de page par exemple ca en recharge d'autre.

Probleme que je rencontre: Faire en sorte de ne pas avoir 2 fois le même article choisi au hasard parmi les 3 et ne pas tomber sur un article avec un id inexistant. ( exemple quand je créé un article il prend un id et quand je le supprime cette id n'est pas réutiliser donc je peux avoir un trou entre. Article id 2 , 3 , 4 , 6, 7 , 8 ,9 )

Donc en résumé: Choisir un article parmi tout les id existant sans pour autant qu'il soit choisi 2 fois ou plus dans l'affichage de la page.

Merci d'avance

2 réponses

le plus simple et propre en même temps est (algorithmiquement parlant):

*d'avoir une lsite complète des numéros d'articles
*de faire un certain nombre de "swaps", c-à-d d'échange de deux éléments pris au hasard (qui peuvent être les mêmes, tant pis ;) ). Si tu en fais assez, la liste sera assez mélangée. Tu n'auras qu'à lire les trois premiers de la liste, vu que tu n'as fait que des échanges, ils seront forcément différents ;)
0
Oula je suis pas sur d'avoir tout saisi.
Pour la liste ==> je selectionne les id de ma table et je les met sous forme de tableau non ?
ensuite "swaps" j'ai pas compris cette partie. Si tu pouvais détailler un petit peu plus ca m'aiderais stp
0
pacorabanix
28 oct. 2009 à 18:08
oui la liste, c'est juste un tableau.

Ensuite : un swap c'est un "échange de deux valeurs". Swap(premierParamètre, deuxièmeParamètre) fait :
je mets la valeur du premier dans une variable temporaire.
je mets la valeur du deuxième dans le premier.
je mets la valeur du temporaire dans le deuxième.

En faisant une boucle d'échanges au bol, dans le sens ou tu appelle plein de fois une fonction "swap" que tu codes vite fait , et les indices qu'elle doit échanger dans le tableau sont pris au hasard avec rand.

ainsi, c'est comme si tu devais mélanger un jeu de carte en échangeant deux cartes du paquet plein de fois ^^.


Ce n'est pas le plus optimisé ni le plus rapide ni le plus rien du tout, mais au moins ça t'évite de tirer deux fois le même.
0