Pregunta

Im usando la respuesta aceptada en esta pregunta. Como tengo los mismos requisitos, I necesita para obtener todas las combinaciones de una matriz de longitud variable con un número variable de elementos. Sin embargo, también lo necesito para producir todas las combinaciones que no utilizan todos los elementos de la matriz, pero están en orden. Si eso tiene sentido?

Así que si esta es la matriz:

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

I también quiero que añadir como 1a, 1b, 1c, 2a, 2b, 2c. Pero no 1x o 1a, ya que se pierde el segundo elemento de la matriz.

Yo no puedo encontrar la manera de cambiar la respuesta para incluir esto.

Gracias, Psy

¿Fue útil?

Solución

Aplicando un enfoque de Josh Davis en la respuesta a la pregunta vinculado:

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

le da las combinaciones deseadas

Otros consejos

Algo como esto? La idea es bucle de una matriz, y se combinan con cada valor en otra 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];
    }
}

Bueno teniendo el código que yo estaba usando un principio, esto es lo que me ocurrió, sólo en caso de cualquier otra persona es 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top