2009-11-18 9 views
0

En utilisant la réponse acceptée dans this question. Comme j'ai les mêmes exigences, j'ai besoin d'obtenir toutes les combinaisons d'un tableau de longueur variable avec un nombre variable d'éléments. Cependant j'ai aussi besoin de produire toutes les combinaisons qui n'utilisent pas tous les éléments du tableau, mais qui sont dans l'ordre. Si ça a du sens?Combinaisons de tableaux PHP

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 second élément du tableau.

Je n'arrive pas à comprendre comment changer la réponse pour l'inclure.

Merci, Psy

+2

Pourquoi exactement 1x et 1y ne sont pas corrects? – Ikke

+0

@Ikke: Parce qu'il ne contient rien du second élément du tableau, c'est-à-dire a, b ou c. @Bart: Désolé, j'aurais dû expliquer la situation un peu mieux, mais je suis dans la même situation que ce que l'OP du post lié était après, mais un peu plus, a changé la question pour refléter cela. – Psytronic

+0

J'ai lu l'autre poste déjà mais mes questions n'ont pas été répondues par lui. C'est pourquoi j'ai demandé. Alors permettez-moi de demander à nouveau, mais maintenant avec un exemple. Pouvez-vous expliquer quelles combinaisons vous recherchez lorsque votre tableau ressemble à ceci: '$ array = array (array ('1', '2'), array ('a', 'b', 'c'), array ('m', 'n'), array ('x', 'y')); 'S'il vous plaît essayez d'éviter les termes comme" etc ", énumérer toutes les combinaisons s'il vous plaît. –

Répondre

1

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 souhaitées

+0

Merci ne doit pas avoir essayé ce code, j'ai effectivement réussi à prendre mon code actuel et le changer à la fin, mais cela fonctionne aussi bien :) – Psytronic

0

Quelque chose comme ça? L'idée est de boucler un tableau et de le combiner avec chaque valeur d'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]; 
    } 
} 
+0

Je doute que le tableau (s) aura une longueur fixe. –

0

bien prendre le code que j'était à l'origine utilisé, ce que je est venu avec, juste au cas où 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);