7
votes

Picker gagnant de billet de loterie PHP

Je suis sur le point de créer un script qui choisit un gagnant pour ma loterie. La quantité de billets est choisie par suivant: montant de l'argent * 100 SO $ 1.26 = 126 billets.

J'ai fait cela, ce qui me donne le numéro de billet gagnant, mais je ne peux pas obtenir l'utilisateur gagnant : xxx

j'ai des lignes comme ceci: xxx

Si c'est possible, je voudrais le garder comme ça et ne pas avoir 1000 lignes dans la base de données avec chaque billet.


10 commentaires

Alors, comment attribuez-vous des numéros de billet? Est-il basé sur l'ordre des joueurs, tel que le joueur 1 sur ce cas a des billets n ° 1 - # 125?


C'est aléatoire en ce moment ..


Hey Exécutant ce script ci-dessus a donné un avertissement sur la boucle pour. AVERTISSEMENT: argument non valide fourni pour Foreach () en ligne 4. Ne savez pas pourquoi vous avez cette partie $ joueur-> DépôtValue * 100?


@ pal4life il provient d'une requête MySQL, afin que je puisse obtenir la somme d'argent déposée ..


S'il vous plaît n'utilisez pas rand () pour cela. Jetez un coup d'œil à php.net/manual/fr/funcunction.random-int. php à la place


@RJDown et comment vais-je avoir le joueur?


Utilisez un tableau pondéré comme vous avez décrit. Voici un exemple Stackoverflow.com/ Questions / 445235 / ... mais substitut mt_rand pour aléatoire_int


REF Une réponse ci-dessous, note également que array_rand utilise la même bibliothèque (plutôt pauvre) comme rand , alors s'il vous plaît n'utilisez pas non plus si vous voulez des résultats équitables.


@RJDown existe-t-il un substitut à des matrices aléatoires?


Pas spécifiquement, mais vous pouvez simplement faire $ Array [Random_int (1, Count ($ TRAY))] Je suppose


4 Réponses :


3
votes

Vous pouvez utiliser ce code: xxx


4 commentaires

J'ai essayé var_dump (getwinnerPlayer ($ joueurs)); , mais il renvoie juste null


J'ai ajouté maintenant un var_dump () dans le code, pouvez-vous essayer maintenant et coller le résultat?


Cela montre simplement la quantité différente des joueurs déposés.


Désolé, j'ai mis à jour le code avec un peu de changement de variable dans la deuxième boucle. Pouvez-vous essayer maintenant s'il vous plaît? (Vous pouvez également supprimer le var_dump)



0
votes

Voici un pseudo code qui peut aider à attirer la loterie au hasard et à identifier le gagnant. La meilleure approche dans ce cas de multiples numéros puisque vous utilisez pour Acheach est d'utiliser des tableaux. Donc, dans le code ci-dessous

<?php
 //Array that holds the players
  $players[] =0;

 //Run this loop from 0 until how many tickets were issued
  for($i=0; $i<100; $i++){
      $players[$i] = $i * 100;
  }

 //Choosing the randomly winning ticket
  $winningTicket = array_rand($players, 1);

//what ticket number won the lottery, (var_dump to be able to see the output)
  echo "Winning Number = ".$players[$winningTicket]."<br/>";;

  //Who won the lottery, (var_dump to be able to see the output)
  echo "Winning Person = Person No.".$winningTicket;


?>


4 commentaires

Désolé mais dans votre code, tous les joueurs ont la même oportumité à gagner et la question indique que tous les joueurs ont un certain nombre de billets égaux au montant payé * 100. Vous avez également une limite de 100 joueurs pour une raison quelconque.


Il génère: int (68) int (6800) et cela ne m'aide pas vraiment à trouver le joueur qui a gagné.


Il y a aussi 2 autres choses dans cette réponse. 1-> pseudo code. 2. Le commentaire ci-dessus 100 mentionne, exécutez cette boucle jusqu'au nombre de billets émis. Je ne sais pas quelle est la méthode d'entrée.


@ Sørenefa a mis à jour le code pour que vous obteniez des commentaires clairs au lieu de décharges. Semble comme une nouvelle introduction de Var_Dump à vous.



2
votes

Je pense à garder votre idée de chiffres au lieu d'apporter une matrice.

Je vais que les joueurs détiennent leurs positions de billetterie (début / fin). Lorsque je choisis un billet au hasard, je vais voir si mon numéro est à l'intérieur de leurs limites et que si c'est le cas, j'ai trouvé le gagnant. xxx

aussi < / p> xxx

sortie : Dave

Dave gagne la plupart du temps car il a 1 000 billets, sur les deux autres joueurs qui ont seulement 400 combiné.


4 commentaires

C'est surcharger des choses, et vous n'avez même pas évité d'avoir à itérer les joueurs deux fois.


Fonctionne parfaitement. Merci!


@Havenard J'ai mis à jour mon code pour éviter de boucler deux fois par les joueurs. Et bien sûr, j'ai utilisé cette méthode pour éviter de créer une matrice avec une taille énorme. (Imaginez 100 billets par personne et 10 000 personnes, la taille de la matrice ne serait pas évolutive) mais un nombre énorme doit être correct pour PHP à gérer.


@Davechen Le point est, puisque vous êtes itération deux fois, rien à créer de ces classes. Voir La réponse d'Oscargeek . Je n'ai pas posté de réponse parce que je devais sortir, mais je ferais quelque chose d'aproxumé à sa solution.



1
votes

- pas de PHP requis, juste mysql. Pas de folle rangée juste 12 dans cet exemple. XXX


0 commentaires