php estrazione random nomi e senza ripetizione

Domenico2013

Utente Attivo
6 Ago 2013
170
0
16
Buongiorno a tutti del forum, vorrei gentilmente un info: ho necessità di estrarre in maniera casuale e senza ripetizione del nome gia' estratto, di nomi contenuti o in un file di testo o in un database mysql (è indifferente). Qualcuno sa come fare? Grazie mille.
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
Ciao, potresti caricare tutti i nomi in un array e poi utilizzare array_rand per estrarli (se ho capito bene quello che vuoi)
 

Domenico2013

Utente Attivo
6 Ago 2013
170
0
16
Ciao n1k4r0....grazie per dritta, purtroppo array in questo modo estrae anche nomi già estratti...a me servirebbe estrazioni di nomi senza che si ripetano quelli già estratti. Grazie.
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
allora nella mia ignoranza io farei due array, nel secondo inserirei gli indici estratti dal primo e ad ogni nuova estrazione si controlla se l'indice è già stato estratto. ovviamente le estrazioni dalla lista andrebbero fatte con un ciclo for.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, se usi un database dovrebbe bastarti questa query
Codice:
SELECT nome FROM tabella ORDER BY RAND() LIMIT 4
dove 4 e il numero di nomi estratti.
E' comunque interessante trovare una soluzione senza database.
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
allora questo il codice in php che dovrebbe fare quello che cerchi. i dati possono essere in un database, in un file di testo, in un xml o in un json, non ha importanza, l'importante è che riesci a raccoglierli in un array

PHP:
<?php
$nomi = array("mario","carlo","antonio","giuseppe","franco","dario","davide","ennio","daniele","francesa","roberta","luisa","franca","daniela","raffaella","marisa","marzia");
$indici = array();
$estratti = array();

$numero_nomi = 5; // nomi da estrarre dall'array
$tot_nomi = count($nomi) - 1; // numero totale dei nomi nell'array

for ( $i = 0; $i < $numero_nomi; $i++ ) {
  $ind = indiceCasuale($tot_nomi, $indici);
  $indici[] = $ind;
  $estratti[] = $nomi[$ind];
}

function indiceCasuale ($tn, $in) {
  $ind = rand(0, $tn);
  if ( in_array($ind, $in) ) {
    $ind = indiceCasuale ($tn, $in);
  }

  return $ind;
}
?>
<!DOCTYPE html>
<html>
  <head>
    <title>prova array casuale php</title>
  </head>
  <body>
    <?php print_r($estratti); ?>
  </body>
</html>

edit:
Se poi salvi gli indici estratti in una variabile di sistema hai la possibilità di ricordare i nomi già estratti anche ricaricando la pagina
 
Ultima modifica di un moderatore:

Domenico2013

Utente Attivo
6 Ago 2013
170
0
16
Ciao Grazie mille per il codice e disponibilità...il codice funziona bene, solo che ripete molte volte nomi già estratti...comunque il succo del post è l'estrazione in questo modo. qualche suggerimento per evitare l'estrazione di nomi già usciti? grazie,
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
è strano che il codice ripeta nomi già estratti a meno che non intendi quando ricarichi la pagina, in quel caso si ripete nomi già estratti ma si può ovviare con il codice che posto adesso

PHP:
<?php session_start();
$nomi = array("mario","carlo","antonio","giuseppe","franco","dario","davide","ennio","daniele","francesa","roberta","luisa","franca","daniela","raffaella","marisa","marzia");
if ( empty($_SESSION['indici']) ) $_SESSION['indici'] = array();
$estratti = array();

$numero_nomi = 5; // nomi da estrarre dall'array
$tot_nomi = count($nomi) - 1; // numero totale dei nomi nell'array
$diff = count($nomi) - count($_SESSION['indici']);

if ( $diff < $numero_nomi ) $numero_nomi = $diff;

if ( $numero_nomi > 0 ) {
  for ( $i = 0; $i < $numero_nomi; $i++ ) {
    $ind = indiceCasuale($tot_nomi, $_SESSION['indici']);
    $_SESSION['indici'][] = $ind;
    $estratti[] = $nomi[$ind];
  }
} else {
  $estratti = 'Nessun nome da estrarre';
}

function indiceCasuale ($tn, $in) {
  $ind = rand(0, $tn);
  if ( in_array($ind, $in) ) {
    $ind = indiceCasuale ($tn, $in);
  }

  return $ind;
}
?>
<!DOCTYPE html>
<html>
  <head>
    <title>prova array casuale php</title>
  </head>
  <body>
    <?php print_r($estratti); ?>
  </body>
</html>

questo codice ricorda gli estratti anche se ricarichi la pagina ed estrae tutti i nomi in blocchi da quanti vuoi tu con la variabile $numero_nomi fino a che li finisce.
in pratica ogni volta che ricarichi la pagina estrae 5 nomi sempre diversi.
 
Ultima modifica di un moderatore:

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
questo dovrebbe essere migliore, quando i nomi sono finiti mostra un avviso e se ricarichi la pagina ricomincia dall'inizio.

PHP:
<?php session_start();
if ( empty($_SESSION['nomi']) ) $_SESSION['nomi'] = array("mario","carlo","antonio","giuseppe","franco","dario","davide","ennio","daniele","francesa","roberta","luisa","franca","daniela","raffaella","marisa","marzia");
if ( empty($_SESSION['indici']) ) $_SESSION['indici'] = array();
$estratti = array();

$numero_nomi = 5; // nomi da estrarre dall'array
$tot_nomi = count($_SESSION['nomi']) - 1; // numero totale dei nomi nell'array
$diff = count($_SESSION['nomi']) - count($_SESSION['indici']);

if ( $diff < $numero_nomi ) $numero_nomi = $diff;

if ( $numero_nomi > 0 ) {
  for ( $i = 0; $i < $numero_nomi; $i++ ) {
    $ind = indiceCasuale($tot_nomi, $_SESSION['indici']);
    $_SESSION['indici'][] = $ind;
    $estratti[] = $_SESSION['nomi'][$ind];
  }
} else {
  $estratti = 'Nessun nome da estrarre';
  $_SESSION['indici'] = false;
}

function indiceCasuale ($tn, $in) {
  $ind = rand(0, $tn);
  if ( in_array($ind, $in) ) {
    $ind = indiceCasuale ($tn, $in);
  }
  return $ind;
}
?>
<!DOCTYPE html>
<html>
  <head>
    <title>prova array casuale php</title>
  </head>
  <body>
    <?php print_r($estratti); ?>
  </body>
</html>
 
Ultima modifica di un moderatore:

Domenico2013

Utente Attivo
6 Ago 2013
170
0
16
Ciao n1k4r0...grazie mille funziona alla perfezioneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee. Posso chiederti solo una piccola chicca: è possibile caricare i nomi in questi codice prendendoli da un file di testo? Grazie :) :) :) :)
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
non mi hai detto com'è strutturato il file dei nomi comunque io presumo siano una serie di nomi separati da virgola

file nomi.txt
Codice:
mario,carlo,antonio,giuseppe,franco,dario,davide,ennio,daniele,francesa,roberta,luisa,franca,daniela,raffaella,marisa,marzia

file php
Codice:
<?php session_start();
if ( empty($_SESSION['nomi']) )  $_SESSION['nomi'] = explode(',', file_get_contents('nomi.txt'));
if ( empty($_SESSION['indici']) ) $_SESSION['indici'] = array();
$estratti = array();

$numero_nomi = 5; // nomi da estrarre dall'array
$tot_nomi = count($_SESSION['nomi']) - 1; // numero totale dei nomi nell'array
$diff = count($_SESSION['nomi']) - count($_SESSION['indici']);

if ( $diff < $numero_nomi ) $numero_nomi = $diff;

if ( $numero_nomi > 0 ) {
  for ( $i = 0; $i < $numero_nomi; $i++ ) {
    $ind = indiceCasuale($tot_nomi, $_SESSION['indici']);
    $_SESSION['indici'][] = $ind;
    $estratti[] = $_SESSION['nomi'][$ind];
  }
} else {
  $estratti = 'Nessun nome da estrarre';
  $_SESSION['indici'] = false;
}

function indiceCasuale ($tn, $in) {
  $ind = rand(0, $tn);
  if ( in_array($ind, $in) ) {
    $ind = indiceCasuale ($tn, $in);
  }
  return $ind;
}
?>
<!DOCTYPE html>
<html>
  <head>
    <title>prova array casuale php</title>
  </head>
  <body>
    <?php print_r($estratti); ?>
    <ul>
      <?php
      foreach ( $_SESSION['nomi'] as $k => $v ) {
        echo '<li';
        if ( ! empty($_SESSION['indici']) && in_array($k, $_SESSION['indici']) ) echo ' style="color: #a00;"';
        echo '>'.$v.'</li>';
      }
      ?>
    </ul>
  </body>
</html>
 

Domenico2013

Utente Attivo
6 Ago 2013
170
0
16
Ciao n1k4r0, grazie mille funziona tutto benissimoooooooooooooooooooooooo. Grazieeeeeeeeeeeeeeeeeeeeeee.
e' proprio quello che serve a me!!!!!!!!!!!!!!! non so come sdebitarmi :)
 

Domenico2013

Utente Attivo
6 Ago 2013
170
0
16
Ciao scusami ancora, come faccio a mettere questa porzione di codice in una tabella? grazie.

<?php

foreach ( $_SESSION['nomi'] as $k => $v ) {
echo '<li';
if ( ! empty($_SESSION['indici']) && in_array($k, $_SESSION['indici']) ) echo ' style="color: #a00;"';
echo '>'.$v.'</li>';
}


?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Estrazione random con nomi presi dal db PHP 22
L Estrazione dati php Database 6
D Chiave unica in estrazione dati da array php PHP 0
gandalf1959 Estrazione e visualizzazione del simbolo dell'euro php/mysqli PHP 0
creatorweb [PHP] estrazione ciclica dati con 2 dati alla volta PHP 2
O [PHP] problema estrazione immagine da db PHP 12
Gigi87 [PHP] Estrazione dati da forum o da social network PHP 1
V [PHP] Estrazione con SQL PHP 1
L estrazione dati da mysql in php e salvataggio in cartella del server PHP 51
E [PHP] estrazione dati in modo non continuativo PHP 1
S [PHP] estrazione dal DB complicata PHP 7
S Php e mysql, estrazione da una tabella e inserimento in un'altra tabella PHP 14
C [PHP][MY SQL] - Estrazione dati database tramite form PHP 8
G estrazione dati da DB tramite PHP errore time out PHP 2
G Script php estrazione email PHP 8
A Ricerca full text mysq ed estrazione con php PHP 8
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 0
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4

Discussioni simili