Question

Im en utilisant la réponse acceptée dans cette question. Comme je l'ai les mêmes exigences, je dois obtenir toutes les combinaisons d'un tableau de longueur variable avec un nombre variable d'éléments. Cependant, je dois aussi pour produire toutes les combinaisons qui n'utilisent pas tous les éléments du tableau, mais sont dans l'ordre. Si cela a un sens?

Donc, si tel est le tableau:

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

Je veux aussi ajouter comme 1a, 1b, 1c, 2a, 2b, 2c. Mais pas 1x ou 1y, car il manque le deuxième élément du tableau.

Je ne peux pas tout à fait comprendre comment changer la réponse à l'inclure.

Merci, Psy

Était-ce utile?

La solution

En utilisant l'approche de Josh Davis dans la réponse à la question liée:

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

vous donne les combinaisons désirées

Autres conseils

Quelque chose comme ça? L'idée est de boucle une matrice, et de combiner avec chaque valeur dans un autre tableau.

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

Et bien prendre le code que j'utilisais à l'origine, ce que je suis venu avec, juste Incase quelqu'un d'autre est curieux

$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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top