Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Losowanie 3 licz z przedziału wiele razy
programistaarek
post
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

Ostrzeżenie: (0%)
-----


Witam chciałbym napisać kod w PHP który z przedziału liczb 30-39 wylosuje mi liczby bez powtórzeń 3 liczby w takiej formie
np 32 35 39
Ale chcę by wylosowało mi maksymalną kombinację takich liczb np
- 30 31 32
- 31 32 33
- 30 31 33
Wiadomo bez powtórzeń
itd itd
Jak takie coś napisać żeby losowało wszystkie kombinacje na raz a nie tylko jeden rekord oraz jak dać ograniczenie np do wylosowania bez powtórzeń hmm 10 rekordów
Obecnie mam taki kod i działa dobrze po losuje 3 liczby bez powtórzeń ale tylko jedna linijka a chcę by pokazało maksymalną możliwość razy

  1. <?php
  2. $tab = array();
  3. for($i=30;$i<=39;$i++)
  4. {
  5. $tab[] = $i;
  6. }
  7.  
  8. $lotto = array_rand ($tab, 3);
  9. echo $tab[$lotto[0]] . "\n";
  10. echo $tab[$lotto[1]] . "\n";
  11. echo $tab[$lotto[2]] . "\n";
  12.  
  13.  
  14. ?>

Pozdrawiam i czekam na odpowiedzi.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
programistaarek
post
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

Ostrzeżenie: (0%)
-----


  1. <title>Losowanie LOTTO</title>
  2. <?php
  3.  
  4. $tab = range(30,39);
  5. $liczebnoscZbioru = 3;
  6. $liczbaLosowan = 300; // ile chcesz mieć zestawów liczb
  7.  
  8. if ($liczebnoscZbioru > count($tab)) die('Zmniejsz liczebność pojedynczego zbioru.');
  9.  
  10. $wynik = [];
  11. $powtorzenie = 0;
  12.  
  13. for ($i = 1; $i <= $liczbaLosowan; $i++) {
  14. shuffle($tab);
  15. $los = array_slice($tab, 0, $liczebnoscZbioru);
  16. sort($los);
  17. if (in_array($los, $wynik)) {
  18. $i--;
  19. $powtorzenie++;
  20. if ($powtorzenie > 300) { // zabezpieczenie przed nieskończoną pętlą
  21. die('Brak liczby wymaganych wyników - zmniejsz liczbę losowań lub zwiększ przedział liczbowy.');
  22.  
  23. }
  24. } else {
  25. $wynik[$i] = $los;
  26.  
  27. $count = 1;
  28.  
  29. foreach( $wynik[$i] as $los )
  30. {
  31. array_multisort($wynik);
  32. if ($count%3 == 1)
  33. {
  34. echo "<br>";
  35. }
  36. echo ''.$los.'&nbsp;';
  37. if ($count%3 == 0)
  38. {
  39. echo "<br>";
  40. }
  41. $count++;
  42. }
  43. if ($count%3 != 1) echo "<br>";
  44.  
  45. }
  46. }
  47. ?>

Obecnie mam taki kod no efekt zamierzony jest także jeszcze raz Ci dziękuję za pomoc. Jeśli pętlę foreach dam poza pętlę for to mi wyświetla tylko i wyłącznie jeden wynik :/
Chyba, że wiesz jak to ogarnąć to mógłbyś podesłać gotowca :/
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 12:57