Combinações de matriz PHP
-
20-09-2019 - |
Pergunta
Estou usando a resposta aceita em essa questão. Como tenho os mesmos requisitos, preciso obter todas as combinações de uma matriz de comprimento variável com um número variável de elementos. No entanto, também preciso produzir todas as combinações que não usam todos os elementos da matriz, mas estão em ordem. Se isso faz sentido?
Então, se esta é a matriz:
$array = array( array('1', '2'), array('a', 'b', 'c'), array('x', 'y'), );
Eu também quero que ele adicione como 1a, 1b, 1c, 2a, 2b, 2c. Mas não 1x ou 1y, porque perde o segundo elemento da matriz.
Não consigo descobrir como alterar a resposta para incluir isso.
Obrigado, psy
Solução
Usando a abordagem de Josh Davis na resposta à pergunta vinculada:
$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);
Dá -lhe as combinações desejadas
Outras dicas
Algo assim? A idéia é fazer um loop uma matriz e combinar com cada valor em outra matriz.
// 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];
}
}
Bem, pegando o código que eu estava usando originalmente, foi isso que eu inventei, apenas caso mais alguém esteja 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);