2013-07-22 13 views
9

Sto costruendo un sito Web che visualizzerà in modo casuale un elenco di avvertimenti ogni volta che la pagina viene aggiornata. L'API di ricerca yelp restituisce 20 elenchi in un array. In questo momento sto usando la funzione di PHP rand (0,19) per generare un elenco casuale ogni volta che la pagina viene aggiornata ($ businesses [rand (0,19)]).Generazione di numeri casuali senza ripetizioni

Qualcuno può farmi riferimento a un metodo più intelligente da randomizzare? Voglio mostrare tutti i 20 elenchi una volta prima che vengano ripetuti. Qual è il metodo preferito per gestire questo problema?

la risposta qui sotto non funziona perché i numeri vengono ricreati ogni volta che aggiorno la pagina. Immagino di dover memorizzare quali numeri ho già usato?

$numbers = range(0, 19); 

shuffle($numbers); 

// Handle Yelp response data 
$response = json_decode($data); 
$RANDOM = rand(1,19); 
$business = $response->businesses; 

echo "<img border=0 src='".$business[$RANDOM]->image_url."'><br/>"; 
echo $business[$RANDOM]->name."<br/>"; 
echo "<img border=0 src='".$business[$RANDOM]->rating_img_url_large."'><br/>"; 

?> 
+0

Il modo più semplice per farlo è precompilare un elenco di valori casuali disinfettati prima della mano. Perché non dovresti semplicemente creare l'ordine, in anticipo, e scegliere l'ultimo che non è stato visualizzato. Per gli utenti occasionali, questo sembrerà casuale. –

+0

come fai a tenere tutti e venti i dintorni per mostrarli? memorizzi le inserzioni localmente o le API ti inviano le stesse su richiesta? –

+0

Cercare "Fisher Yates" o consultare http://stackoverflow.com/questions/8116872/generate-random-numbers-in-array/8116947#8116947. – paxdiablo

risposta

30

soluzione più semplice:

$numbers = range(1, 20); 
shuffle($numbers); 

Alternativa:

<?php 

function randomGen($min, $max, $quantity) { 
    $numbers = range($min, $max); 
    shuffle($numbers); 
    return array_slice($numbers, 0, $quantity); 
} 

print_r(randomGen(0,20,20)); //generates 20 unique random numbers 

?> 

domanda simile: #5612656

CodePad: http://codepad.org/cBaGHxFU

Aggiornamento:

Stai diventando tutti gli annunci in un array chiamato $businesses.

  1. Generare un ID elenco casuale utilizzando il metodo sopra indicato e quindi memorizzarlo nella tabella del database.
  2. Ad ogni aggiornamento pagina, generare un ID elenco casuale e verificare se corrisponde al valore nel database. In caso contrario, visualizza quell'elenco e aggiungi quel valore al tuo tavolo.
  3. Andare al punto 1.

Quando questo è completato, si avrà mostrato tutti i 20 annunci in una sola volta.

Spero che questo aiuti!

+1

Spiacente, avrei dovuto includere il codice per una migliore spiegazione. Si prega di guardare il mio Modifica – ryank

+0

@RyanGoo: aggiornato. –

Problemi correlati