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

    [freephp] Mescolatore elementi array

    Sto impazzendo da due giorni, qualcuno sa vedere perchè questo script non funziona come dovrebbe ? Restituisce un'array a cui mancano elementi e ogni volta di lunghezza variabile.

    function mescolatore($elenco) {
    $scelte = array();
    $index2 = 0;
    while ($index2 < count($elenco)) {
    $intchoice = rand(0,count($elenco));
    $scelte[] = $elenco[$intchoice];
    unset($elenco[$intchoice]);
    array_merge($elenco); #ho provato anche sort() ma il risultato è lo stesso
    $index2++;
    }
    return $scelte;
    }

    Stesso risultato anche con quest'altra versione che ho tradotto da un mio vecchio script in python con la differenza che lì funzionava alla perfezione.

    function mescolatore($elenco) {
    $scelte = array();
    $index2 = 0;
    while ($index2 < count($elenco)) {
    $scelta = $elenco[rand(0,count($elenco))];
    $scelte[] = $scelta
    $position = 0;
    while ($position < count($elenco)) {
    if ($elenco[$position] == $scelta) {
    unset($elenco[$position]);
    sort($elenco);
    break;
    } else {
    $position++;
    }
    }
    $index2++;
    }
    return $scelte;
    }

  2. #2
    Ci sono diversi problemi.

    Prima di tutto count() restituisce il numero di valori contenuti in un array, ma l'ultimo elemento ha indice count($array) - 1, non count($array) visto che gli indici degli array iniziano da 0.

    Poi tu usi unset che ti puo' creare dei buchi, percio' hai bisogno di reindicizzare l'array. Per fare cio' puoi usare array_values().

    Altro problema e' che tu nella condizione del while usi due quantita' variabili: $index2 che cresce e count($elenco) che decresce, quindi al massimo otterrai un array che e' lungo meta' dell'originale.

    Ultima cosa, PHP fornisce una funzione apposta per questa cosa: http://it.php.net/manual/en/function.shuffle.php

  3. #3
    Grazie mille dei suggerimenti !

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 © 2024 vBulletin Solutions, Inc. All rights reserved.