2012-05-03 24 views
5

Mam skrypt PHP, w którym mam tablicę liczb całkowitych, powiedzmy $forbidden.Losowa liczba całkowita z warunkami

Chcę uzyskać losową liczbę całkowitą od 1 do 400, która nie jest w $forbidden.

Oczywiście nie chcę żadnej pętli, która zrywa się, gdy rand daje wynik działania. Chciałbym czegoś bardziej skutecznego.

Jak to zrobić?

+1

Dlaczego pętla nie działa? –

+0

@MichaelRobinson: To nie jest skuteczne, ponieważ $ zabronione może być bardzo duże. Paul: Myślałem o uzyskaniu wszystkich liczb całkowitych możliwych w tablicy, a następnie pobrałem z nich próbkę, ale zastanawiałem się, czy jest coś ładniejszego w tym języku. – Cydonia7

+0

@MichaelRobinson: Pętla jest nieskuteczna, ponieważ teoretycznie możesz trafić w niedozwolone numery 1000000 razy z rzędu (choć jeśli tak się stanie, to pewnie powinieneś wziąć udział w loterii), ale tak. –

Odpowiedz

10

Umieść wszystkie niedozwolone numery w tablicy i użyj array_diff z range(1,400). Otrzymasz tablicę dozwolonych liczb, wybierz losową z array_rand().

<?php 

$forbidden = array(2, 3, 6, 8); 
$complete = range(1,10); 
$allowed = array_diff($complete, $forbidden); 

echo $allowed[array_rand($allowed)]; 

ten sposób usuwasz wykluczonych liczb ze zbioru wskazań i znoszący potrzebę pętli :)

+0

Nie znałem array_diff, szukałem go przez jakiś czas! Dziękuję za Twoją odpowiedź. – Cydonia7

0

produkować tablicę dozwolonych numerów. Znajdź numer w tej tablicy. Wybierz jedną z nich losowo.