Algoritmo combinatorio fra array

di il
2 risposte

Algoritmo combinatorio fra array

Salve a tutti.
Vi espongo il mio problema. Supponiamo di avere un indefinito numero di array e di voler ottenere tutte le combinazioni
possibili tra ciascun elemento di ciascun array e ciascun elemento di ogni altro array. Un esempio chiarirà meglio la questione.
$a1 = array("01", "02");
$a2 = array("bianco", "verde");
$a3 = array("uno", "due", "tre");
Io voglio ottenere le seguenti combinazioni

01 uno verde
01 due verde
01 tre verde
01 uno bianco
01 due bianco
01 tre bianco
02 uno verde
02 due verde
02 tre verde
02 uno bianco
02 due bianco
02 tre bianco

Per ora sono riuscito ad ottenere questo

//creo un array di array
$aG[0] = $arr0;
$aG[1] = $arr1;
$aG[2] = $arr2;
e lo passo ad una funzione
createCode6($aG);
La funzione è:
function createCode6($listOfArray){
    $i = 0;
    $len = sizeof($listOfArray);
    while ($i < $len){
        for ($y=0;$y<sizeof($listOfArray[0]);$y++){
            $code = array();
            $code[] = $listOfArray[0][$y];
            for ($x=1;$x<$len;$x++){
                $code[] = $listOfArray[$x][$i];
            }
            echo implode('',$code);
            echo "<br>";
        }
        $i++;
    }
}
Si ottiene il seguente risultato

01unoverde
02unoverde
01duebianco
02duebianco
01tre
02tre

Qualcuno ha qulache idea o suggerimento? Fin'ora ho trovato solo algoritmi combinatori che danno tutte le combinazioni possibili (con o senza ripetizioni) tra gli elementi di un singolo array.

Gratitudine eterna per chiunque mi dia una dritta
Ciao

2 Risposte

  • Re: Algoritmo combinatorio fra array

    La soluzione l'ha cortesemente fornita l'utente aneesme di forums.devshed.com Il codice è il seguente e devo ammettere che io ero totalmente fuori strada:
    <?php
    function generateCodes($arr) {
        $pos = 0;
        global $codes, $pos;
        if(count($arr)) {
            for($i=0; $i<count($arr[0]); $i++) {
                $tmp = $arr;
                $codes[$pos] = $arr[0][$i];
                $tarr = array_shift($tmp);
                $pos++;
                generateCodes($tmp);
    
            }
        } else {
            echo join("", $codes)."<br/>";
        }
        $pos--;
    }
    $a0 = array("01", "02");
    $a1 = array("uno", "due", "tre");
    $a2 = array("verde", "bianco");
    $aG = array($a0, $a1, $a2);
    $codes = array();
    $pos = 0;
    generateCodes($aG);
    
    ?>
    Funziona egregiamente.
    Ciao a tutti
  • Re: Algoritmo combinatorio fra array

    Salve a tutti e grazie in anticipo a coloro che cercheranno di risolvere il mio problema.Ho scritto questo codice php che funziona correttamente ma vorrei generalizzare per $b con $n elementi.Ovviamente se nel codice iserite anche i commenti ve ne sarei eternamente grato
    vi posto il codice

    <?php
    //k sono le x che devono comparire
    $k=3;
    // a l'array con i due segni che compariranno
    $a=array("x","-");
    // b il numero di elementi
    $b=array("1","2","3","4","5","6");
    // c il contatore di x
    $c=0;
    for($e=0;$e<count($a);$e++){
    $b[0]="$a[$e]";
    if($e==0){
    $c++;
    }else{
    $c--;
    }
    for($f=0;$f<count($a);$f++){
    $b[1]="$a[$f]";
    if($f==0){
    $c++;
    }else{
    $c--;
    }
    for($g=0;$g<count($a);$g++){
    $b[2]="$a[$g]";
    if($g==0){
    $c++;
    }else{
    $c--;
    }
    for($h=0;$h<count($a);$h++){
    $b[3]="$a[$h]";
    if($h==0){
    $c++;
    }else{
    $c--;
    }
    for($i=0;$i<count($a);$i++){
    $b[4]="$a[$i]";
    if($i==0){
    $c++;
    }else{
    $c--;
    }
    for($l=0;$l<count($a);$l++){
    $b[5]="$a[$l]";
    if($l==0){
    $c++;
    }else{
    $c--;
    }
    if($c==$k){
    echo $b[0].$b[1].$b[2].$b[3].$b[4].$b[5]."<br>";
    }
    }
    }
    }
    }
    }
    }
    ?>
Devi accedere o registrarti per scrivere nel forum
2 risposte