Visualizzazione risultati 1 fino 7 di 7

Discussione: [PHP] Combinazioni infinite

  1. #1
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Question [PHP] Combinazioni infinite

    Ciao a tutti.
    Dovrei creare uno script che, teoricamente, dovrebbe generare combinazioni alfanumeriche infinite, ma che in pratica stamperà le possibili combinazioni con un TOT di caratteri.
    Ho creato questo elenco con i caratteri possibili.
    Codice PHP:
    $Caratteri = array(
    0 => 0,
    1 => 1,
    2 => 2,
    3 => 3,
    4 => 4,
    5 => 5,
    6 => 6,
    7 => 7,
    8 => 8,
    9 => 9,
    10 => 'a',
    11 => 'b',
    12 => 'c',
    13 => 'd',
    14 => 'e',
    15 => 'f',
    16 => 'g',
    17 => 'h',
    18 => 'i',
    19 => 'j',
    20 => 'k',
    21 => 'l',
    22 => 'm',
    23 => 'n',
    24 => 'o',
    25 => 'p',
    26 => 'q',
    27 => 'r',
    28 => 's',
    29 => 't',
    30 => 'u',
    31 => 'v',
    32 => 'w',
    33 => 'x',
    34 => 'y',
    35 => 'z',
    36 => '.');
    Dovrei fare in modo che, se ad esempio l'array contenesse solamente 1, 2 e 3, mi desse '1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 111, 123' ecc..
    Dovrei però aggiungere un filtro che dice che, ad esempio, i caratteri sono 2. In questo caso il campo si restringerebbe a '11, 12, 13, 21, 22, 23, 31, 32, 33'.
    Ho assegnato un numero ad ogni carattere perché penso che con i numeri si possa lavorare meglio...
    Spero di essermi spiegato bene.
    Grazie mille!

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,067

    Predefinito

    Oddio... la rischiesta è strana :D

    Se ti servono soltanto da [1][1] a [36][36] puoi fare una cosa come:

    Codice PHP:
    <?php
    $len
    = count($Caratteri);
    for(
    $i=0;$i<$len;$i++)
    for(
    $k=0;$k<$len;$k++)
    echo
    $Caratteri[$i].$Caratteri[$k];
    ?>
    Però, se ti serve infinita (come vedo dal titolo ), ovvero anche a più di 2 cifre, beh.... penso che stai sbagliando approccio su quello che devi fare.

    Teoricamente, una cosa del tipo:

    Codice PHP:
    <?php
    $len
    = count($Caratteri);
    $cifre = <infinito>;
    $output '';
    while(
    $j++<$cifre) //se infinito, while(1). Dopo l'echo però andrebbe messo tipo una ob_flush (ovviamente il server va in timeout e blablabla...)
    for($i=0;$i<$len;$i++)
    {
    $output .= $Caratteri[$i];
    echo
    $output.' ';
    }
    ?>
    p.s: non ho provato nessuno script che ti ho scritto.

    Ciao!
    Ultima modifica di alemoppo : 11-05-2013 alle ore 01.07.54

  3. #3
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Ok, come pensavo mi sono spiegato male.
    Per semplificarci la vita, facciamo finta che l'array sia (1=>"a",2=>"b",3=>"c").
    Dovrei ottenere tutte le combinazioni di 2 lettere, quindi dovrebbe stampare da 11 a 33, ovvero "11,12,13,21,22,23,31,32,33", ovvero "aa,ab,ac,ba,bb,bc,ca,cb,cc".
    Lo script che si avvicina di più è il primo, ma il for non deve essere eseguito tante volte quanti gli elementi dell'array.
    Spero di essermi spiegato meglio...
    Grazie mille!

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,067

    Predefinito

    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    Ok, come pensavo mi sono spiegato male.
    Per semplificarci la vita, facciamo finta che l'array sia (1=>"a",2=>"b",3=>"c").
    Dovrei ottenere tutte le combinazioni di 2 lettere, quindi dovrebbe stampare da 11 a 33, ovvero "11,12,13,21,22,23,31,32,33", ovvero "aa,ab,ac,ba,bb,bc,ca,cb,cc".
    Il primo non fa quello che dici?


    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    ma il for non deve essere eseguito tante volte quanti gli elementi dell'array
    Perché?

    Ciao!

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Sfruttando un array come coda, un'idea potrebbe essere questa:
    Codice PHP:
    <?php
    $alphabet
    = array ('a', 'b', 'c');
    $limit = 3;

    $queue = array ();
    $result = array ();

    for (
    $i = 0; $i < count($alphabet); $i++)
    $queue[] = $alphabet[$i];

    for (
    $i = 0; $i < count($queue); $i++)
    {
    for (
    $j = 0; $j < count($alphabet); $j++)
    {
    $word = $queue[$i] . $alphabet[$j];
    if (
    strlen($word) >= $limit)
    result[] = $word;
    else
    queue[] = $word;
    }
    }

    print_r ($result);
    ?>
    Regola i parametri dello script sulle prime due righe, dovrebbe funzionare se la lunghezza richiesta è almeno 2 lettere (con una, il risultato coincide con $alphabet...).

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Scusami ale, non avevo considerato i due for... in pratica basta aggiungere tanti for quanti sono i caratteri che voglio...
    Dementialsite non complicare la vita altrui!
    Grazie mille, come sempre!

  7. #7
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,067

    Predefinito

    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    in pratica basta aggiungere tanti for quanti sono i caratteri che voglio...
    Sì, ma non è un gran ché... In quel caso, per numeri di caratteri a piacere, è meglio il secondo script che ho scritto (sempre che funzioni...).

    Ciao!

Regole di scrittura

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