jak wylosować pojedynczą liczbę z danej puli tak aby ta liczba się nie powtarzała?

0

męczę się z tematem od kilku dni i nie mogę sobie poradzić..

jak wylosować pojedynczą liczbę z danej puli tak aby ta liczba się nie powtarzała?

Potrzebuje to do losowania pytania:
$pytanie=rand(0,$ile_dane-1); // to losuje liczbę ale ona się powtarza

funkcja zostanie wywołana kiedy użytkownik wyśle formularz z typem radio,

Próbowałem zrobić ta za pomocą sesji w której zapisuje się wylosowana liczba ale i tak liczby się powtarzały.

session_start();
 
// tablica z liczbami
$aPytanie = array (0,1,2,3,4,5,6,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
 
 
 
if (!isset ($_SESSION['wylosowany_numer_pamiec'])) $_SESSION['wylosowany_numer_pamiec'] = array ();
 
$iPytanie = count ($aPytanie);
$bClear = false;
 
// Losowanie bez powtórzeń
do {
	$iLos = rand (0, $iPytanie-1);
	if (count ($_SESSION['wylosowany_numer_pamiec']) == $iPytanie) {
		$_SESSION['wylosowany_numer_pamiec'] = array ();	// Zerujemy magazyn losów
		$bClear = true;
	}
} while (in_array ($iLos, $_SESSION['wylosowany_numer_pamiec']));
$_SESSION['wylosowany_numer_pamiec'][] = $iLos;
echo '<span>Numer:</span> '.$aPytanie[$iLos].'</p>';

Znalazłem gdzieś, że można to zrobić za pomocą tablicy oraz pętli.

1.wylosowana liczba zapisuję się do tablicy i usuwa się z puli
2. losowanie następnej liczby
3. sprawdzenie czy wylosowana liczba znajduje się w tablicy liczb wylosowanych
4. jeśli nie dodaje liczbę do tablicy i zapisuje ją do zmiennej, jeśli tak losuje dalej

W tej chwili próbuje to zrobić na plikach txt ale też mi nic nie wychodzi.

Nie potrafię niestety przełożyć tego na kod.

0

Uno: Jeśli losujesz jedną liczbę, to ona CI się nigdy nie powtórzy, bo to jest losowanie JEDNEJ liczby. Secundo: Liczby wylosowane zapisujesz do tablicy. Przy losowaniu kolejnej liczby przelatujesz pętlę i sprawdzasz czy taka liczba już wcześniej była wylosowana.

1
session_start();
if (!$_SESSION['liczby']) { // nie ma zmiennej w sesji w ogole, to przygotowujemy zmienna
  echo 'pusta sesja<br />'; // wypisujemy na potrzeby tego przykladu informacje
  $_SESSION['liczby']=array(); // przygotowujemy tablice
  for ($i=1; $i<=20; $i++) { $_SESSION['liczby'][]=$i; } // wypelniamy ja liczbami 1-20 (mozesz wyzej w deklaracji uzyc innych liczb, to jest przyklad)
}
shuffle($_SESSION['liczby']); // mieszamy zawartosc tablicy
echo 'wylosowana liczba: '.$_SESSION['liczby'][0]; // wypisujemy pierwsza liczbe
unset($_SESSION['liczby'][0]); // usuwamy pierwsza liczbe
if (!$_SESSION['liczby']) { // jezeli tablica zostala pusta
  echo '<br />liczby sie skonczyly'; // na potrzeby demostracji informujemy o tym fakcie
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1