Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Combinazioni tra array

  1. #1

    Combinazioni fra array

    Salve a tutti,
    Dalle ricerche fatte sul forum non ho trovato nulla di simile a quel che voglio. Sto cercando di adattare un script per generare delle combinazioni alfanumeriche, ho trovato questo codice in rete:
    Codice PHP:
    <?php
    $max        
    9;
    $profondita $max-5+1;
    $conta      0;
    for (
    $i=1;$i<=$profondita;$i++) {
     for (
    $j=$i+1;$j<=$max;$j++) {
      for (
    $k=$j+1;$k<=$max;$k++) {
       for (
    $l=$k+1;$l<=$max;$l++) {
        for (
    $m=$l+1;$m<=$max;$m++) {
         print 
    "$i - $j - $k - $l - $m
    "
    ;
         
    $conta++;
        }
       } 
      }
     }
    }
    print 
    "
    Totale combinazioni=
    $conta";

    ?>
    Lo script fa molto bene il suo lavoro, ma mi servirebbe avere delle combinazioni fra array, se qualcuno potesse aiutarmi.

    Quello che vorrei ottenere:

    codice:
    array1 = a, b, c, d, e
    array2 = 1, 2, 3, 4, 5
    array3 = f, g, h, i, j
    array4 = 6, 7, 8, 9, 10
    array5 = l, m, n, o, p
    
    combinazioni:
    a - 1  - f - 6 - l
    b - 1  - f - 6 - l
    c - 1  - f - 6 - l
    d - 1  - f - 6 - l
    e - 1  - f - 6 - l
    a - 2  - f - 6 - l
    b - 2  - f - 6 - l
    c - 2  - f - 6 - l
    d - 2  - f - 6 - l
    e - 2  - f - 6 - l
    ...
     :
     :
     :
     V
     E cosi fino a 3125 combinazioni (5*5*5*5*5=3125).

  2. #2
    La rete è una maravilha. Trovato un script l'ho adattato alle mie esigenze. Se a qualcuno potesse servire qualcosa di simile.

    Codice PHP:
    <?php
    function combinazione$strg$termini$i )
    {
        
    $stringa '';
        if ( 
    $i >= count$termini ) )
        {
            
    $stringa .= trim$strg ) . "\n";
        }
        else
        {
            foreach ( 
    $termini[$i] as $termo )
            {
                
    $stringa .= combinazione$strg $termo '##'$termini$i );
            }
        }
        return 
    $stringa;
    }

    $opizioni = array(
        
    'col1'    => array( '1''2''3''4''5' ),
        
    'col2'    => array( 'a''b''c''d''e' ),
        
    'col3'    => array( '6''7''8''9''10' ),
        
    'col4'    => array( 'f''g''h''i''j' ),
        
    'col5'    => array( '11''12''13''14''15' ),
    );

    $combinare = array();
    foreach( 
    $opizioni as $k => $v )
    {
        
    $combinare[] = $v;
    }

    $stringa combinazione''$combinare);
    $stringa preg_split'/\n/'$stringa, -1PREG_SPLIT_NO_EMPTY );

    $combinazioni = array();
    foreach( 
    $stringa as $k => $v )
    {
        
    $combinazioni[] = preg_split'/##/'$v, -1PREG_SPLIT_NO_EMPTY );
    }
    print_r$combinazioni );
    exit;    
    ?>
    Tutte quelle 3125 combinazioni previste vengono sfornate al volo, ora ho bisogno di sistemarle in una lista intellegibile, quindi, ringraziando già da subito per la disponibilità, avete ancora un'opportunità di darmi una mano.

  3. #3
    Scusate se insisto.
    Sono proprio in difficolta, ho letto alcune pagine, ma purtroppo, non riesco da solo a mettere in pratica le conoscenze acquisite, vorrei che qualcuno mi aiutasse a trasformare l'output di questo (sopra) script in una lista formatatta in questo modo:

    a 1 f 6 l
    b 1 f 6 l
    c 1 f 6 l
    d 1 f 6 l
    e 1 f 6 l
    a 2 f 6 l
    b 2 f 6 l
    c 2 f 6 l
    d 2 f 6 l
    e 2 f 6 l
    ...
    ecc

    Attendo fiducioso.

  4. #4
    Ciao a tutti.
    Forse la mia richiesta è assurda, o forse troppo impegnativa. Purtroppo non sono ancora in grado di discernere.
    Oltre alla lettura, il metodo per l'apprendimento che sto seguendo si basa nell'adattamento dei codici, cercando di smontare e rimontare proprio per capire la sintassi e la logica. Spero essere nella strada giusta. Comunque, qui sotto posto un'altro esempio, sperando che qualcuno mi possa dire se è possibile fondere queste due funzioni (sotto e sopra) per ottenere una lista formattata. Grazie ancora per la disponibilità e pazienza.
    Codice PHP:
    <?php
    function flatten($array) { 
        if (!
    is_array($array)) { 
            
    // nothing to do if it's not an array 
            
    return array($array); 
        } 
        
    $result = array(); 
        foreach (
    $array as $value) { 
            
    // explode the sub-array, and add the parts 
            
    $result array_merge($resultflatten($value)); 
        } 
        return 
    $result

     
    $arr = array('Vi', array('chiedo''umilmente', array('un''aiuto'), 'per''riuscire''a''capire') , 'e''implementare''il''codice' ) ; 
    echo 
    '<ul>'
    foreach (
    flatten($arr) as $value) { 
        echo 
    '<ul>'$value'[/list]'

    echo 
    '<ul>';
    ?>
    Tutti i miei tentativi di fonderli sono falliti.
    PS. Non voglio la papa in bocca, voglio soltanto dei consigli su dove metterci le mani.

  5. #5
    Non so se ho ben capito quello che vuoi...

    Codice PHP:
    $a=array( 'a''b''c''d''e' );
    $b=array( '1''2''3''4''5' );
    $c=array( 'f''g''h''i''j' );
    $d=array( '6''7''8''9''10' );
    $e=array( 'l''m''n''o''p' );

    foreach(
    $e as $e_value){
    foreach(
    $d as $d_value){
    foreach(
    $c as $c_value){
    foreach(
    $b as $b_value){
    foreach(
    $a as $a_value){
        echo 
    $a_value."-".$b_value."-".$c_value."-".$d_value."-".$e_value."
    "
    ;
    }}}}} 

  6. #6
    Originariamente inviato da lazybone
    Non so se ho ben capito quello che vuoi...
    Grazie per la risposta.
    Come temevo il modo come mi esprimo non aiuta. Mi rendo conto di essere poco sintetico.
    Intanto ho cercato di caricare il codice da te postato, ma ritorna questo errore:
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'
    Cerco di fare un riassunto, ho un codice, quello piu lungo qualche post sopra, e vorrei ottenere una lista come questa:
    a 1 f 6 l
    b 1 f 6 l
    c 1 f 6 l
    d 1 f 6 l
    e 1 f 6 l
    a 2 f 6 l
    b 2 f 6 l
    c 2 f 6 l
    d 2 f 6 l
    e 2 f 6 l
    ...
    ecc
    Ma l'output "print_r" è:
    Array ( [0] => Array ( [0] => 1 [1] => a ) [1] => Array ( [0] => 1 [1] => b ) [2] => Array ( [0] => 1 [1] => c ) [3] => Array ( [0] => 1 [1] => d ) [4] => Array ( [0] => 1 [1] => e ) [5] => Array ( [0] => 2 [1] => a ) [6] => Array ( [0] => 2 [1] => b ) ...ecc
    Quindi, vorrei capire come devo procedere.

  7. #7
    Ok... ma questa lista vuoi stamparla a video???
    Se sì avevo capito bene... e questo codice:

    Codice PHP:
    $a=array( 'a''b''c''d''e' );
    $b=array( '1''2''3''4''5' );
    $c=array( 'f''g''h''i''j' );
    $d=array( '6''7''8''9''10' );
    $e=array( 'l''m''n''o''p' );

    foreach(
    $e as $e_value){
    foreach(
    $d as $d_value){
    foreach(
    $c as $c_value){
    foreach(
    $b as $b_value){
    foreach(
    $a as $a_value){
        echo 
    $a_value."-".$b_value."-".$c_value."-".$d_value."-".$e_value."
    "
    ;
    }}}}} 
    l'ho appena provato e funziona alla perfezione. L'errore che riporti

    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'
    sembrerebbe non riguardare questo pezzo di codice...

  8. #8
    Sconcertante, evviva l'anonimato!

    Da tre giorni stavo cercando di ottenere quello risultato, e come spesso accade, era più semplice di quanto immaginavo, quando uno chiede aiuto non è per pigrizia mentale ma è proprio perchè si sono esaurite le altre vie.

    Il codice da te fornito è perfetto. Si, si... è esattamente quello che intendevo, ora proverò a riempire gli array con un $_POST o almeno cercherò di capirne il funzionamento.

    Originariamente inviato da lazybone
    l'ho appena provato e funziona alla perfezione. L'errore che riporti
    sembrerebbe non riguardare questo pezzo di codice...
    L'errore veniva fuori perchè ho utilizzatol'avanzatissimo metodo del "copy/paste" il che generava dei caratteri invisibili al posto degli spazzi, bastato cancellare gli spazi e rifarli a mano senza rinunciare ai benefici del metodo di cui sopra.

    Grazie mille lazybone!

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.