Estrazione casuali di codici

Ciao.

Ho un'esigenza strana.

Data una query che mi estrae diciamo cinque codici differenti (1516, 1234, 5898, 7893), una volta appoggiati in un array ho bisogno di estrarli casualmente: una vola il 1516, un'altra il 7893, un'altra ancora il 1234 senza seguire un ordine preciso ma puramente casuale ...

Qualcuno conosce qualche script?

Grazie

Ciao

Stone  :bye:

inviato 10 anni fa
stone
X 0 X

rand: http://it2.php.net/manual/it/function.rand.php

mt_rand: http://it2.php.net/manual/it/function.mt-rand.php

ad esempio:

$index = mt_rand(0,count($tuoarray));
echo $tuoarray[$index];

spero di aver capito quello che ti serviva...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Tieni presente però che come suggerito da Lore potrebbe anche capitare l'estrazione di uno stesso codice.

Edit:

Una piccola correzione:

$index = mt_rand(0,count($tuoarray)-1);

risposto 10 anni fa
LonelyWolf
modificato 10 anni fa
X 0 X

Thanks ad entrambi!  :)

Ciao

Stone  :bye:

risposto 10 anni fa
stone
X 0 X

ehm, funzionerebbe pure ma ma c'è un problema.

Ho questo codice che mi estrae i valori contenuti all'interno del campo turno. Da questa query escono quattro numeri: 1105, 1480, 1656 o 63. che poi appoggio per visualizzarli nella variabile $turno.

Quando visualizzo i valori su web ogni volta che faccio "aggiorna" dovrei vederli in un ordine diverso, invece visualizza o il numero 0 o il numero 1 che in realtà variano sempre di posizione però a me non serve contarli ma visualizzarli in modo variabile ...

$indaga = "SELECT `37491`.turno FROM `37491` WHERE (((`37491`.data)>='2006-08-01' And (`37491`.data)<='2006-08-31'))
GROUP BY `37491`.turno HAVING (((`37491`.turno)<>'no' And (`37491`.turno) Is Not Null))";
$query_indaga = mysql_query ($indaga,$link)
or die ("Non riesco ad eseguire la richiesta  $query_indaga");

while ($valori = mysql_fetch_array ($query_indaga)){
$turno = $valori ["turno"];

$index = mt_rand(0, count($query_indaga));

echo "$index";
}

c'è la possibilità di visualizzare in un ordine randomico dei codici sopra esposti.

Stone  :bye:

risposto 10 anni fa
stone
X 0 X

ehm, funzionerebbe pure ma ma c'è un problema.

Ho questo codice che mi estrae i valori contenuti all'interno del campo turno. Da questa query escono quattro numeri: 1105, 1480, 1656 o 63. che poi appoggio per visualizzarli nella variabile $turno.

Quando visualizzo i valori su web ogni volta che faccio "aggiorna" dovrei vederli in un ordine diverso, invece visualizza o il numero 0 o il numero 1 che in realtà variano sempre di posizione però a me non serve contarli ma visualizzarli in modo variabile ...

$indaga = "SELECT `37491`.turno FROM `37491` WHERE (((`37491`.data)>='2006-08-01' And (`37491`.data)<='2006-08-31'))
GROUP BY `37491`.turno HAVING (((`37491`.turno)<>'no' And (`37491`.turno) Is Not Null))";
$query_indaga = mysql_query ($indaga,$link)
or die ("Non riesco ad eseguire la richiesta  $query_indaga");

while ($valori = mysql_fetch_array ($query_indaga)){
$turno = $valori ["turno"];

$index = mt_rand(0, count($query_indaga));

echo "$index";
}

c'è la possibilità di visualizzare in un ordine randomico dei codici sopra esposti.

Stone  :bye:

risposto 10 anni fa
stone
X 0 X

Dunque, il codice è un po' ostico quindi ti faccio una domanda per capire bene:

1 - $turno = $valori ["turno"]; a questo punto $turno è un array con 4 valori (e quindi il camo turno è un array)?

Il dubbio mi viene perche dici che echo "$index"; (visualizza l'indice da usare per l'array) è sempre 0 o 1, mi fa pensare che $turno contiene un solo valore.

$index = mt_rand(0, count($query_indaga)); dev essere $index = mt_rand(0, count($turno)-1); perchè count($turno) restituisce 4 (per 4 valori) ma come indice dell'array devi usare da 0 a 3

risposto 10 anni fa
LonelyWolf
X 0 X

Dunque, il codice è un po' ostico quindi ti faccio una domanda per capire bene:

1 - $turno = $valori ["turno"]; a questo punto $turno è un array con 4 valori (e quindi il camo turno è un array)?

Il dubbio mi viene perche dici che echo "$index"; (visualizza l'indice da usare per l'array) è sempre 0 o 1, mi fa pensare che $turno contiene un solo valore.

$index = mt_rand(0, count($query_indaga)); dev essere $index = mt_rand(0, count($turno)-1); perchè count($turno) restituisce 4 (per 4 valori) ma come indice dell'array devi usare da 0 a 3

si, i quattro codici dei turni li metto in un array, di quell'array devo estrarre un codice turno a caso non devo farne il conteggio. Il codice turno estratto a caso devo visualizzarlo. Credo che mt_rand() si riferisca solo a un numero a caso all'interno di un range di numeri predefinio ma se ho dei gruppi di numeri, dei codici, non funziona. Non esiste un'altra funzione?  :bye:

risposto 10 anni fa
stone
X 0 X

Non mi hai capito, se tu fai echo $turno; cosa visualizza?

mt_rand genere numeri casuali in un range predefinito, come tutte le funzioni random.

In questo caso tu la usi per generare casualmente l'indice del turno e quindi echo $turno[$index]; è il codice casuale dei 4. Chiaro?

risposto 10 anni fa
LonelyWolf
X 0 X

Non mi hai capito, se tu fai echo $turno; cosa visualizza?

mt_rand genere numeri casuali in un range predefinito, come tutte le funzioni random.

In questo caso tu la usi per generare casualmente l'indice del turno e quindi echo $turno[$index]; è il codice casuale dei 4. Chiaro?

echo $turno; mi visualizza tutti e quattro i turni. A me serve che venga visualizzato a caso uno solo dei quattro codici

risposto 10 anni fa
stone
X 0 X

Allora se ti visualizza i 4 turni non è un array, altrimenti avrebbe visualizzato: Array

Il codice deve essere modificato ad es. così se il separatore dei codici è lo spazio:

$turno = split(" ",$valori ["turno"]);

risposto 10 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda