Frage

Im mit der akzeptierten Antwort in diese Frage . Als ich die gleichen Anforderungen haben, muss ich mit einer variablen Anzahl von Elementen alle Kombinationen eines Arrays mit variabler Länge erhalten. Ich brauche es aber auch alle Kombinationen zu erzeugen, die nicht alle Elemente des Arrays verwenden, aber in Ordnung sind. Wenn der Sinn macht?

Also, wenn dies ist das Array:

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

ich will es auch, wie 1a, 1b, 1c, 2a, 2b, 2c hinzuzufügen. Aber nicht 1x oder 1y, weil es das zweite Element des Arrays verpasst.

Ich kann nicht ganz herausfinden, wie die Antwort zu ändern, diese aufzunehmen.

Danke, Psy

War es hilfreich?

Lösung

Mit Josh Davis' Ansatz in der Antwort auf die Frage verknüpft:

    $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);

gibt Ihnen die gewünschten Kombinationen

Andere Tipps

So etwas wie das? Die Idee ist, eine Schleife Array und für jeden Wert in einem anderen Array verbinden.

// 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];
    }
}

Nun den Code nehmen, dass ich ursprünglich mit, das ist, was ich kam mit, nur für den Fall jemand anderes ist neugierig

$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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top