Domanda

Im usando la risposta accettata in questa domanda . Come ho gli stessi requisiti, ho bisogno di ottenere tutte le combinazioni di una matrice di lunghezza variabile con un numero variabile di elementi. Tuttavia ho anche bisogno di produrre tutte le combinazioni che non utilizzano tutti gli elementi della matrice, ma sono in ordine. Se questo ha un senso?

Quindi, se questa è la matrice:

$array = array(
    array('1', '2'),
    array('a', 'b', 'c'),
    array('x', 'y'),
);

voglio anche aggiungerlo come 1a, 1b, 1c, 2a, 2b, 2c. Ma non 1x o 1A, perché manca il secondo elemento della matrice.

Non riesco a capire come cambiare la risposta a includere questo.

Grazie, Psy

È stato utile?

Soluzione

Utilizzando l'approccio Josh Davis' in risposta alla domanda collegata:

    $array = array( array('1', '2'), 
                    array('a', 'b', 'c'), 
                    array('m', 'n'), 
                    array('x', 'y'));

    $result = array();
    $php = 'list($a' . implode(',$a', array_keys($array)) . ')=$array;';
    $close_brakets='';
    $r='';
    foreach($array as $k => $v)
    {
        $r .= '$v'.$k;
        $php.='foreach($a'.$k.' as $v'.$k.'){ $result[]="'.$r.'";';
        $close_brakets.="}";
    }

    $php .= $close_brakets;

    eval($php);

    print_r($result);

ti dà le combinazioni desiderati

Altri suggerimenti

qualcosa di simile? L'idea è di cappio una matrice, e si combinano con ciascun valore in un altro array.

// Loop array[0].
for($i=0; $i<count($array[0]); $i++) {
    // Loop array[1]
    for($j=0; $j<count($array[1]); $j++) {
        echo $array[0][$i];
        echo $array[1][$j];
    }
}

Bene prendere il codice che mi è stato originariamente utilizzato, questo è ciò che mi è venuta, solo in caso chiunque altro è curioso

$patterns_array = array();

$php = '';
foreach ($patterns as $i = > $arr)
{
    $php .= 'foreach ($patterns[' . $i . '] as $k' . $i . ' => $v' . $i . '){';
    $tmp = array();
    for($ii=1; $ii<=$i; $ii++){
        $tmp[] = $ii; 
    }
    $php .= '$patterns_array[] = $v'.implode('."::".$v', $tmp).';';
}

$php .= '$patterns_array[] = $v' . implode('."::".$v', array_keys($patterns)) . ';' . str_repeat('}', count($patterns));

eval($php);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top