PHP Array Birleşmeleri

2 Cevap php

Yılında kabul edilen cevabı kullanarak Im this question. I aynı gereksinimleri gibi, unsurların bir değişken sayıda değişken uzunlukta bir dizi, tüm kombinasyonları almak gerekir. Ancak ben de bu dizinin tüm unsurları kullanmak değil tüm kombinasyonları üretmek gerekir, ama düzen vardır. Eğer mantıklı?

Yani bu dizi ise:

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

Ayrıca, bu 1a, 1b, 1c, 2a, 2b, 2c gibi eklemek istiyorum. Ama 1x veya 1y, bu dizinin ikinci elemanı özlüyor çünkü.

Ben oldukça bu eklemek cevabını değiştirmek için nasıl anlamaya olamaz.

Teşekkürler, Psy

2 Cevap

Bağlantılı soruya cevap Josh Davis 'yaklaşımını kullanarak:

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

Eğer istenilen bileşimlerini verir

Peki ben aslında kullanıyordum kod alarak, bu herkesten meraklı sadece örtmek, ben ile geldi budur

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