Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012

    combinazioni tra elementi di un array

    ciao a tutti ...
    ho una situazione di questo tipo e proprio non riesco a saltarci fuori!!!
    Codice PHP:
    Array
    (
        [
    3] => Array
            (
                [
    8] => Colori Misti
                
    [9] => Marrone
                
    [10] => Borgogna
                
    [11] => Blu
            
    )

        [
    4] => Array
            (
                [
    12] => Stampa a Tampone 1
                
    [13] => Stamp tipo Transfer
                
    [14] => Laser
                
    [15] => Serigrafia
            
    )

        [
    5] => Array
            (
                [
    16] => Monocromatico
                
    [17] => Bicromia
                
    [18] => Tricromia
                
    [19] => Quadricromia
            
    )


    e dovrei creare delle combinazioni tra i vari elementi di questo array per ottenere un risultato di questo tipo


    Colori Misti-Stampa a Tampone 1-Monocromatico
    Colori Misti-Stampa a Tampone 1-Bicromia
    Colori Misti-Stampa a Tampone 1-Tricromia
    Colori Misti-Stampa a Tampone 1-Quadricromia

    Colori Misti-Stamp tipo Transfer-Monocromatico
    Colori Misti-Stamp tipo Transfer-Bicromia
    Colori Misti-Stamp tipo Transfer-Tricromia
    Colori Misti-Stamp tipo Transfer-Quadricromia

    ecc ecc...

    premetto che gli indici sono gli ID in tabella e possono variare sempre..

    voi come mi consigliate di fare? avevo pensato ad una ricorsività ma non riesco a mettere giu proprio niente di valido...

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    up
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Cosi ?

    codice:
    <?php
      function combinazioni($a,$b,$c) {
    	 $retArr = array();
    	 foreach($a as $cA) {
    	  foreach($b as $cB) {
    		 foreach($c as $cC) {
    		  $retArr[] = $cA . " - " . $cB . " - " . $cC;
    		 }
    		}
    	 }
    	 return  $retArr;
    	} // function combinazioni($a,$b,$c)
    	 
      $a = array(1, 2, 3, 4, 5);
      $b = array("uno", "due", "tre", "quattro", "cinque");
    	$c = array("pippo","pluto","caio");
      $d = combinazioni($a,$b,$c);
      print_r($d);
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    esattamente!!!!

    a vedere il codice che hai postato mi sento un moscerino, tanto semplice e io mi complicavo la vita con giri inutili!!!

    grazie!!!!
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  5. #5
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Io avrei bisogno di qualcosa di simile... però...

    Originariamente inviato da badaze
    Cosi ?

    codice:
    <?php
      function combinazioni($a,$b,$c) {
    	 $retArr = array();
    	 foreach($a as $cA) {
    	  foreach($b as $cB) {
    		 foreach($c as $cC) {
    		  $retArr[] = $cA . " - " . $cB . " - " . $cC;
    		 }
    		}
    	 }
    	 return  $retArr;
    	} // function combinazioni($a,$b,$c)
    	 
      $a = array(1, 2, 3, 4, 5);
      $b = array("uno", "due", "tre", "quattro", "cinque");
    	$c = array("pippo","pluto","caio");
      $d = combinazioni($a,$b,$c);
      print_r($d);
    ?>

    Che si basi solo su un array di 90 elementi e che posso generare per questo insieme di elementi tutte le combinazioni possibili non uguali (indipendentemente dalla posizione degli elementi constituenti) sia per triple che per quartine che per cinquine...

    Es. per 90 elementi mi dovrebbero risultare ben 49.000.000 comb ca

    Grazie badaze


  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Caspita. Hai ritrovato un post di quasi 2 anni fa.

    codice:
    <?php
    $max = 9;
    $conta = 0;
    for ($i=1;$i<=$max;$i++) {
     for ($j=1;$j<=$max;$j++) {
      if ($i != $j) {
       for ($k=1;$k<=$max;$k++) {
        if ($k != $i && $k != $j) {
         for ($l=1;$l<=$max;$l++) {
          if ($l != $i && $l != $j && $l != $k) {
           for ($m=1;$m<=$max;$m++) {
            if ($m != $i && $m != $j && $m != $k && $m != $l) {
             print "$i - $j - $k - $l - $m
    ";
             $conta++;
            } // if ($m != $i && $m != $j && $m != $k && $m != $l) {
           }
          } // if ($l != $i && $l != $j && $l != $k) {
         } 
        } // if ($k != $i && $k != $j) {
       }
      } // if ($i != $j) { 
     }
    }
    print "
    Totale combinazioni=$conta";
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Intanto grazie e complimenti

    Grazie e complimenti per la rapidità e praticità di sviluppo.

    Per quanto riguarda un eventuale ulteriore ottimizzazione secondo le mie necessità ti chiedo come possa evitare le ripetizioni delle comb generate...

    es:

    questo interessantissimo tuo cod per $max = 5; mi genera ben 120 righe... mentre secondo le mie esigenze nel caso i numeri siano solo 5 le comb generate per questi dovrebbero essere.. o meglio dovrebbe essere solo e soltanto 1. Non interessandomi le combinazioni simili... differenti solo per la posizione degli elementi.

    Per quanto riguarda le zone commentate "disattive" basta decommentarle per avere i vari casi tipo (triple e quaterne..) ? O debbo fare qualcosaltro per poterle utilizzare correttamente?

    Ad esempio per avere tutte le triple con 9 numeri basta che commenti e decommenti le righe in questo modo... oppure sto fagianando alla grande? tnx!

    Codice PHP:
    <?php
    $max 
    9;
    $conta 0;
    for (
    $i=1;$i<=$max;$i++) {
     for (
    $j=1;$j<=$max;$j++) {
      if (
    $i != $j) {
       for (
    $k=1;$k<=$max;$k++) {
        if (
    $k != $i && $k != $j) {
         for (
    $l=1;$l<=$max;$l++) {
          if (
    $l != $i && $l != $j && $l != $k) {
           for (
    $m=1;$m<=$max;$m++) {
            if (
    $m != $i && $m != $j && $m != $k && $m != $l) {
             
    //print "$i - $j - $k - $l - $m
    ";
             
    $conta++;
            } // if (
    $m != $i && $m != $j && $m != $k && $m != $l) {
           }
          }//if (
    $l != $i && $l != $j && $l != $k) {
          } 
        }if (
    $k != $i && $k != $j) {
         print "
    $k $i $j";
       }
      } // if (
    $i != $j) { 
     }
    }
    print "
    Totale combinazioni=$conta";
    ?>
    Comunque sia GRAZIE infinite badaze


  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    I commenti sono presenti solo per riperire l'if corrispondente.

    Per fare quello che vuoi è ancora più semplice.
    codice:
    <?php
    $max        = 8;
    $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";
    
    ?>
    Di sicuro c'è la possibilità di fare qualcosa di ricorsivo.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

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.