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
<?php $tab = http://www.php.net/array(); for($i=30;$i<=39;$i++) { $tab[] = $i; } $lotto = http://www.php.net/array_rand ($tab, 3); http://www.php.net/echo $tab[$lotto[0]] . "\n"; http://www.php.net/echo $tab[$lotto[1]] . "\n"; http://www.php.net/echo $tab[$lotto[2]] . "\n"; ?>
Można np. tak:
W $wynik masz $liczbaLosowan unikalnych tablic z $liczebnoscZbioru wylosowanymi z zadanego przedziału liczbami.
$tab = http://www.php.net/range(30,39); $liczebnoscZbioru = 3; $liczbaLosowan = 30; // ile chcesz mieć zestawów liczb if ($liczebnoscZbioru > http://www.php.net/count($tab)) http://www.php.net/die('Zmniejsz liczebność pojedynczego zbioru.'); $wynik = []; $powtorzenie = 0; for ($i = 1; $i <= $liczbaLosowan; $i++) { http://www.php.net/shuffle($tab); $los = http://www.php.net/array_slice($tab, 0, $liczebnoscZbioru); http://www.php.net/sort($los); if (http://www.php.net/in_array($los, $wynik)) { $i--; $powtorzenie++; if ($powtorzenie > 100) { // zabezpieczenie przed nieskończoną pętlą http://www.php.net/die('Brak liczby wymaganych wyników - zmniejsz liczbę losowań lub zwiększ przedział liczbowy.'); } } else { $wynik[$i] = $los; } }
W $wynik masz $liczbaLosowan unikalnych tablic z $liczebnoscZbioru wylosowanymi z zadanego przedziału liczbami.
$tab = http://www.php.net/range(30,39); $liczebnoscZbioru = 3; $liczbaLosowan = 30; // ile chcesz mieć zestawów liczb if ($liczebnoscZbioru > http://www.php.net/count($tab)) http://www.php.net/die('Zmniejsz liczebność pojedynczego zbioru.'); $wynik = []; $powtorzenie = 0; for ($i = 1; $i <= $liczbaLosowan; $i++) { http://www.php.net/shuffle($tab); $los = http://www.php.net/array_slice($tab, 0, $liczebnoscZbioru); http://www.php.net/sort($los); if (http://www.php.net/in_array($los, $wynik)) { $i--; $powtorzenie++; if ($powtorzenie > 100) { // zabezpieczenie przed nieskończoną pętlą http://www.php.net/die('Brak liczby wymaganych wyników - zmniejsz liczbę losowań lub zwiększ przedział liczbowy.'); } } else { $wynik[$i] = $los; } }
Nic a Array to jest zasadnicza różnica.
Podglądu zawartości całej tablicy (array) nie wyświetla się pleceniem echo. Zrób sobie jakąś pętlę do wyświetlania tego wedle życzenia. Albo użyj print_r czy var_dump by podejrzeć co w tablicy $wynik się znajduje i jak jest uporządkowane.
I każdy array zawiera n-elementów z liczebności zbioru. Przecież sam chciałeś taki wynik.
<title>Losowanie LOTTO</title> <?php $tab = http://www.php.net/range(30,39); $liczebnoscZbioru = 3; $liczbaLosowan = 300; // ile chcesz mieć zestawów liczb if ($liczebnoscZbioru > http://www.php.net/count($tab)) http://www.php.net/die('Zmniejsz liczebność pojedynczego zbioru.'); $wynik = []; $powtorzenie = 0; for ($i = 1; $i <= $liczbaLosowan; $i++) { http://www.php.net/shuffle($tab); $los = http://www.php.net/array_slice($tab, 0, $liczebnoscZbioru); http://www.php.net/sort($los); if (http://www.php.net/in_array($los, $wynik)) { $i--; $powtorzenie++; if ($powtorzenie > 300) { // zabezpieczenie przed nieskończoną pętlą http://www.php.net/die('Brak liczby wymaganych wyników - zmniejsz liczbę losowań lub zwiększ przedział liczbowy.'); } } else { $wynik[$i] = $los; $count = 1; foreach( $wynik[$i] as $los ) { if ($count%3 == 1) { http://www.php.net/echo "<br>"; } http://www.php.net/echo ''.$los.' '; if ($count%3 == 0) { http://www.php.net/echo "<br>"; } $count++; } if ($count%3 != 1) http://www.php.net/echo "<br>"; } } ?>
Daj jeszcze:
tuż przed działaniem na tabilcy z wynikami.
http://www.php.net/array_multisort($wynik);
<title>Losowanie LOTTO</title> <?php $tab = http://www.php.net/range(30,39); $liczebnoscZbioru = 3; $liczbaLosowan = 300; // ile chcesz mieć zestawów liczb if ($liczebnoscZbioru > http://www.php.net/count($tab)) http://www.php.net/die('Zmniejsz liczebność pojedynczego zbioru.'); $wynik = []; $powtorzenie = 0; for ($i = 1; $i <= $liczbaLosowan; $i++) { http://www.php.net/shuffle($tab); $los = http://www.php.net/array_slice($tab, 0, $liczebnoscZbioru); http://www.php.net/sort($los); if (http://www.php.net/in_array($los, $wynik)) { $i--; $powtorzenie++; if ($powtorzenie > 300) { // zabezpieczenie przed nieskończoną pętlą http://www.php.net/die('Brak liczby wymaganych wyników - zmniejsz liczbę losowań lub zwiększ przedział liczbowy.'); } } else { $wynik[$i] = $los; $count = 1; foreach( $wynik[$i] as $los ) { http://www.php.net/array_multisort($wynik); if ($count%3 == 1) { http://www.php.net/echo "<br>"; } http://www.php.net/echo ''.$los.' '; if ($count%3 == 0) { http://www.php.net/echo "<br>"; } $count++; } if ($count%3 != 1) http://www.php.net/echo "<br>"; } } ?>
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)