Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Funzione random ma con pesi di % diversi

    Ciao a tutti.

    Ho questi 4 id con le rispettive percentuali.

    A - con 10%
    B - con 20%
    C - con 20%
    D - con 50%

    sapete dirmi come posso fare una funzione in php che:

    Un ciclo di 100 volte mi faccia comparire 10 volte A, 20 Volte B , 20 Volte C e 50 Volte D ?

    Esiste un modo random che però tenga conto delle percentuali ?
    Es. D esce molto più frequentemente di A.

  2. #2
    beh tiri a caso un numero tra 0 e 99 e se esce tra 0 e 9 fai vedere il div A, se esce tra 10 e 29 fai vedere B, se esce tra 30 49 C e tra 50 e 99 D
    No?

  3. #3
    mmm.. buona idea...

    ma se le percentuali sono per A 4,17% e per B 95,83% ?

  4. #4
    cosa cambia, non capisco.

  5. #5
    ok.. farò un random da 0 a 9999.

    ho bisogno però di un'altro aiuto.

    Mi creo un Array A con i numeri da 0 a 9999 e un Array B vuoto.

    Come faccio in PHP a "pescare" un numero dall'Array A e metterlo nell'Array B ?

  6. #6
    Non ti basta fare
    codice:
    $A=4.17;
    $B=95.83;
    
    if(rand(1,10000)/100 < $A) { 
    // fai vedere A
    } else {
    //fai vedere b
    }
    ?

  7. #7
    Si ok... se gli ID sono solo 2.

    Ma se gli ID sono n come faccio ?
    Ovviamente calcolerò le percentuale per ogni n.

  8. #8
    Si beh ma questo è un problema di matematica, non di php
    codice:
    $percentuali=array(10.5,79.5,6,4);
    //Calcolo limiti che è più comodo
    $limiti= array();
    $somma=0;
    foreach($percentuali as $percentuale) {
    $somma+=$percentuale
    array_push($limiti, $somma);
    }
    
    $rand= mt_rand(1,10000)/100 ;
    if($rand < $limiti[0]) { 
    // fai vedere A
    } else if($rand<$limiti[1] ){
    //fai vedere b
    }
    else if($rand<$limiti[2] ){
    //fai vedere c
    }
    else if($rand<$limiti[3] ){
    //fai vedere d
    }
    Se vuoi più ids basta che aggiungi la percentuale nell'array in alto e il relativo else if(){} in fondo. Dimmi se va che non l'ho testato.

  9. #9
    Funziona, ti sei dimenticato un ; ma funziona !

    Adesso ci penso su e come posso integrarlo... Grazie!!!



    Codice PHP:
    $percentuali=array(10.5,79.5,6,4);
    //Calcolo limiti che è più comodo
    $limiti= array();
    $somma=0;
    foreach(
    $percentuali as $percentuale) {
    $somma+=$percentuale;
    array_push($limiti$somma);
    }

    $randmt_rand(1,10000)/100 ;
    if(
    $rand $limiti[0]) { 
     echo 
    "Fai Vedere A";
    } else if(
    $rand<$limiti[1] ){
     echo 
    "Fai Vedere B";
    }
    else if(
    $rand<$limiti[2] ){
     echo 
    "Fai Vedere C";
    }
    else if(
    $rand<$limiti[3] ){
     echo 
    "Fai Vedere D";


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.