Problème de hasard et répétitions - PHP - Programmation
Marsh Posté le 02-01-2005 à 23:18:14
Salut,
Tu peux :
- enlever l'élément affiché avec array_splice pour qu'il ne puisse plus être affiché
- OU utilise shuffle($tableau) qui va mélanger ton tableau et ainsi tu pourras y lire séquentiellement n élément sans avoir peur des doublons.
- ...
Marsh Posté le 02-01-2005 à 23:36:16
Je cherche des infos sur array_splice mais je misère un peu...
Quelqu'un pourrait-il me paramétrer ça ?
Merci ! Et Merci Tentacle !!
Marsh Posté le 02-01-2005 à 23:38:22
Ou sinon tout simplement array_rand(); qui me semble fait justement pour ce genre de truc
Marsh Posté le 02-01-2005 à 23:44:48
Désolé d'être loud, mais encore une fois je débute. J'ai mis 4 heures à pondre la chiure de code juste au dessus, et je ne sais pas comment appliquer vos conseils.
Si vous aviez le petit bout de code à ajouter, ça me permettrais d'etre fonctionnel ET d'apprendre un truc ! :-)
Merci encore
Marsh Posté le 03-01-2005 à 00:21:26
bozobuzu a écrit : Désolé d'être loud, mais encore une fois je débute. J'ai mis 4 heures à pondre la chiure de code juste au dessus, et je ne sais pas comment appliquer vos conseils. |
Il n'y a pas de honte à être "loud", lit la doc des 3 fonctions array_rand, shuffle et array_splice, regarde les exemples.
Ensuite, en fonction de la fonction choisie, tu adaptes ton code
PS : la condition de ta boucle while est problématique, <= ne posera pas de problèmes si par hasard $i venait à changer dans la boucle
Marsh Posté le 03-01-2005 à 00:53:56
Bon, je me suis creusé la tete, et mon code donne ça :
<?
$fichier = "toto.txt";
if ($tableau = file($fichier)) {
$maxi = 15;
for($i=0; $i != $maxi ; $i++)
{
srand((double)microtime()*10000);
$nb = rand(0,sizeof($tableau)-1);
echo $tableau[$nb];
array_splice ($tableau, $nb);
}
echo ' ';
}
?>
Et ça marche ! Sympa, déjà !
Il ya juste un truc bizarre : de temps en temps, 4 ou 5 phrases s'affichent, puis 1 ou 2, et certaines fois, rien du tout !
Vous arriveriez à voir pourquoi ?
Marsh Posté le 03-01-2005 à 01:23:18
suis le conseil de Naceroth, un "!=" c'est dangereux il vaut mieux un "<=" paske si pour une raison x ou y, i dépasse maxi, ben avec ton code tu retrouvera alors dans une boucle infinie, et ça c'est pas bon comme truc...
je ne sais pas non plus à quoi ça te sert d'afficher un espace à la fin (echo ' '; )...
Mais la méga question:
Pourquoi mettre ça dans un if ?????????
Surtout que la condition d'un if, c'est en général un test (donc == ou ===), alors que toi tu fait une affectation (=)...
De meme si tu utilise une version de PHP supérieur ou égale à la 4.2.0, srand ne sert plus à rien, l'inialisation de rand est automatique.
Donc ton code abrégé doit pouvoir donner ça (j'ai pas testé)
Code :
|
count et sizeof sont des alias, donc ça marche aussi bien l'un que l'autre, j'ai mis count par habitude...
EDIT:
Au fait il doit y avoir un pb avec ton array_plice, là comme c'était écrit il me semble que tu efface bcp plus que seulement la ligne "nb" ce qui explique peut etre pkoi tu te retrouve à n'avoir que peu de valeur parfois.... comme tu ne donné pas de longueur "lenght", ça tronquait de la ligne "nb" jusqu'à la fin
Marsh Posté le 03-01-2005 à 01:42:26
Xav_ a écrit : |
A ces questions fort pertinantes je réponds : parce que le débutant utilise les moyens du bord, CAD pas grand chose ! J'ai pas dépassé le stade du "if...else..." encore, mais j'avais besoin de ce script maintenant. En tout cas j'ai appris des trucs !
Merci pour tout Xav_, ça marche nikel !!! Un vrai bonheur !!
Marsh Posté le 03-01-2005 à 01:46:23
on a tous débuté, mais il est important que tu comprenne tes erreurs afin de ne pas les refaire
--> c'est ce qui fait que tu ne sera pas un débutant toute ta vie
Je préfère que tu vienne avec un code à toi qui a des erreurs mais qui montre ta motivation plutot qu'un truc piqué ailleurs que tu n'aurais pas compris...
bon courage pour la suite, et reviens nous voir si tu as besoin
Marsh Posté le 03-01-2005 à 15:34:44
Code :
|
Marsh Posté le 03-01-2005 à 20:26:01
Je suis d'accord pour array_rand, mais j'étais gêné par le fait que la documentation ne précise pas si cette fonction peut ou non renvoyer des doublons.
Marsh Posté le 03-01-2005 à 20:40:53
A ce que j'ai compris ca devrais juste prendre l'array et le melanger ... donc pas de doublon possible ... mais j'ai pas fait le test
Marsh Posté le 03-01-2005 à 21:10:10
Tout comme shuffle tu veux dire alors ? (à part le nombre d'éléments souhaités)
Marsh Posté le 03-01-2005 à 21:15:31
C ce que je pensais au debut .. maintenant je commance a me demander .. parceque si tu passes comme nombres d'argument count($mon_array)+1 ... si c'est juste un shuffle qui permet de tirer les X premiers elements ... ca devrait donner une erreur
Marsh Posté le 02-01-2005 à 23:05:47
Bonjour,
Voila, j'aurais besoin d'un script pour sélectionner et afficher au hasard une quinzaine de phrases sur au moins 40.
Les phrases sont répertoriées dans un fichier texte.
Mon code donne ceci :
(c'est tout pourri, mais je suis novice en prog et j'essai petit à petit)
<?
$fichier = "toto.txt";
if ($tableau = file($fichier)) { // on crée un tableau à partir des lignes du fichier
$maxi = 15;
//----------[DEBUT BOUCLE]------------
for($i=0; $i != $maxi ; $i++)
{
srand((double)microtime()*10000);
$nb = rand(0,sizeof($tableau)-1); // on tire au hasard un élément du tableau
echo $tableau[$nb]; // affichage de la phrase correspondante
}
//------------[FIN BOUCLE]------------
echo ' ';
}
?>
Le problème, c'est qu'il arrive souvent qu'une phrases soit répétée 2 ou 3 fois.
Comment faire pour qu'il n'y ait pas de répétitions ??
Merci !!
Message édité par bozobuzu le 02-01-2005 à 23:07:15