2010-05-09 55 views
5

Bu dizi var2d dizideki tüm olasılıklar

1!a 
1!b 
1!c 
1!d 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
2!a 
2!b 
2!c 
2!d 
[email protected] 
[email protected] 
... 

Şu anda bu kodu yaşıyorum:

for($i = 0; $i < count($array[0]); $i++) 
{ 
    for($j = 0; $j < count($array[1]); $j++) 
    { 
     for($k = 0; $k < count($array[2]); $k++) 
     { 
      echo $array[0][$i].$array[1][$j].$array[2][$k].'<br/>'; 
     } 
    } 
} 

o inşaat, ama çirkin olduğunu düşünüyorum ve ben daha diziler ekliyorum, ben daha eklemek zorunda. Bunu yinelemeli olarak yapmanın bir yolu olduğundan eminim, ama nasıl başlayacağımı/nasıl yapacağımı bilmiyorum. Küçük bir yardım güzel olabilir!

Teşekkürler! Yeni bir dizideki tüm kombinasyonuna sahip olmak istiyorsanız işlevini genişletmek, daha doğrusu daha sonra bunları yazdırmak için,

combination($array); 

: Sonra

function combination($array, $str = '') { 
    $current = array_shift($array); 
    if(count($array) > 0) { 
     foreach($current as $element) { 
      combination($array, $str.$element); 
     } 
    } 
    else{ 
     foreach($current as $element) { 
      echo $str.$element . PHP_EOL; 
     } 
    } 
} 

:

cevap

4

Böyle bir özyinelemeli fonksiyon oluşturabilir öyleyse:

function combination($array, array &$results, $str = '') { 
    $current = array_shift($array); 
    if(count($array) > 0) { 
     foreach($current as $element) { 
      combination($array, $results, $str.$element); 
     } 
    } 
    else{ 
     foreach($current as $element) { 
      $results[] = $str.$element; 
     } 
    } 
} 

$results = array(); 
combination($array, $results); 
+0

Bu nasıl PHP 5'de kırılmaz? Demek istediğim, işe yarıyor ... ama neden? Diziler ve nesneler hakkında her zaman şimdi referans olarak geçilen şeyler hakkında bir şeyler okuduğumu hatırlıyorum sanıyordum ... Bu $ dizi mangled anlamına gelmez mi? – cHao

+0

@cHao: Diziler referans olarak geçmedi. Bu yüzden, ikinci örnekte "$ result" dizisini açık bir şekilde iletmek için '&' kullanıyorum. –

İlgili konular