Visualizzazione risultati 1 fino 8 di 8

Discussione: [PHP] Array -> mazzo di carte -> shuffle

  1. #1
    Guest

    Predefinito [PHP] Array -> mazzo di carte -> shuffle

    Ciao,
    sto creando un mazzo di carte, il problema é che per fare il mazzo mi viene una cosa del genere:
    Codice PHP:
    array(array(2, "clubs")...)
    dove ci sono i puntini significa che va avanti (il mazzo e formato da un array contenente altri array che definiscono le carte cioè valore e segno)..
    il mio problema è che adesso vorrei mescolarle, provo usando la funzione shuffle(), ma niente quando vado stampare con print_r nn mi da quello che mi dava prima, ma mi da un numero che ancora nn capisco da dove viene... sapete aiutarmi? grazie..ciao...

  2. #2
    Guest

    Predefinito

    usare rand() e un foreach() per mescolarle, poi la funzione for(), sempre con rand(), per decidere quante carte mostrare, è un buon consiglio?

  3. #3
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Non mischia gli array perché non conosce l'ordine degli elementi.
    Avresti lo stesso problema anche se fai un sort.

    Le soluzioni possono essere modificare l'array
    Array("AssoFiori"=>array(1"fiori"),"duefiori"=>arr ay(2,"fiori")...etc...)
    E in questo modo il shuffle dovrebbe funzionare.

    Altrimenti devi ricrearti l'array dinamicamente.
    Non ho mai provato ma forse array_ values o array_ keys ti restituiscono il tuo array con le chiavi.
    Da provare dato che gli array in php non li amo troppo.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  4. #4
    Guest

    Predefinito

    Ora rivedendo il codice hai fatto:
    Codice PHP:
    array(array(2, "clubs")...)
    non dovrebbe essere così?
    Codice PHP:
    array(array(2 => "clubs")...)

  5. #5
    Guest

    Predefinito

    Codice PHP:
    array('1'=>'club');
    In ogni caso anche se non specifichi la chiave numerica viene assegnata in automatico.

    Quindi

    Codice PHP:
    array('club','clubb');
    se fai un print_r avrai la chiave ugualmente.
    Per estrarli in modo random puoi contare quanti elementi hai, ed usare rand(0,lunghezza_array).

    Ciao

  6. #6
    Guest

    Predefinito

    ciao, innanzitutto grazie dei consigli, ho provato a mescolare le carte in questo modo:
    Codice PHP:
    public function deck_shuffle()
    {
    $ordered_deck = $this->deck;
    $shuffle_deck = array();

    while(
    count($ordered_deck) != 0) {
    $num = rand(0, count($ordered_deck)-1);
    $shuffle_deck[] = $ordered_deck[$num];
    unset(
    $ordered_deck[$num]);
    array_merge($ordered_deck);
    }

    $this->deck = $shuffle_deck;
    }
    cioe tolgo da uno metto inun altro, mi da errore però nell'array_merge, mi dice che non riesce ad allocare la memoria perche troppo grande immagino...
    saqpete aiutarmi? grazie, ciao!

  7. #7
    Guest

    Predefinito

    Dovresti postare la classe. Non fai prima a passare l'array alla funzione?

  8. #8
    Guest

    Predefinito

    Forse questa fa al caso tuo:
    Codice PHP:
    <?php
    function twodshuffle($array)
    {
    // Get array length
    $count = count($array);
    // Create a range of indicies
    $indi = range(0,$count-1);
    // Randomize indicies array
    shuffle($indi);
    // Initialize new array
    $newarray = array($count);
    // Holds current index
    $i = 0;
    // Shuffle multidimensional array
    foreach ($indi as $index)
    {
    $newarray[$i] = $array[$index];
    $i++;
    }
    return
    $newarray;
    }
    ?>
    Fonte: http://php.net/shuffle

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •