2016-03-24 19 views
-1

Tamam, neredeyse senaryolarımı bitirdim, ancak çıktımın olması gerektiği gibi değil. Komut dosyası görevi, tüm çok boyutlu dizi anahtarlarının toplamından tüm olası sayı kombinasyonlarını oluşturmaktır. Ive birkaç betik düzenledim ve tek bir betikte birleştirdim, ancak istenilen çıktıyı elde edemiyorum.PHP tüm olası sayı kombinasyonlarını çıktı

$test = array(0 => array(53, 22, 12), 
    1 => array(94, 84, 94), 
    2 => array(56, 45, 104) 
); 

Sonra dizi anahtarlarını alıp yeni dizide saklayabilirsiniz:

foreach ($test as $key => $row) { 
    $output[] = count($row);   
}          
for($keycount = 1; $keycount <= count($output); $keycount++){ 
    $newarray[$keycount] = $keycount; 
} 

Sonra anahtarları saymak

Ok, örneğin, bunun gibi dizi söylüyorlar sağlar Yeni oluşturulan dizi, bu yüzden son kombinasyon bu sayıya dayanmaktadır.

111 
211 
311 
121 
221 
321 
131 
231 
331 
112 
. 
. 
. 
333 

Ama komut dosyası ile: böyle

$arraycount = count($newarray); 
$maxcombinations = pow($arraycount, $arraycount); 
$return = array(); 
$conversion = array(); 
foreach ($newarray as $key => $value) { 
    $conversion[] = $key; 
} 
for ($i = 0; $i < $maxcombinations; $i++) { 
    $combination = base_convert($i, 10, $arraycount); 
    $combination = str_pad($combination, $arraycount, "0", STR_PAD_BOTH); 
    $return[$i][] = substr(strtr($combination, $conversion), 1, $arraycount); 
}  
echo "<pre>".print_r($return, true)."</pre>"; 

alıyorum çıktı:

nihai dizi böyle bakmak gerekiyordu bu yüzden yukarıda bahsedilen örnekte, ben 3 kombinasyonları var
Array 
(
[0] => Array 
    (
     [0] => 111 
    ) 

[1] => Array 
    (
     [0] => 121 
    ) 

[2] => Array 
    (
     [0] => 131 
    ) 

[3] => Array 
    (
     [0] => 211 
    ) 

[4] => Array 
    (
     [0] => 221 
    ) 

[5] => Array 
    (
     [0] => 231 
    ) 

[6] => Array 
    (
     [0] => 311 
    ) 
+4

Olası kopyalar (http://stackoverflow.com/questions/15101494/how-to-get- [çok boyutlu dizinin tüm olası kombinasyonları nasıl alınır] hepsi-olası-çok-çok-kombinasyonlu kombinasyonları) – mitkosoft

+0

Sabit anahtar ve değerleri kullandığı için, bu konuyu yinelenen olarak sınıflandırabileceğinizi düşünmüyorum. – Greedy

+0

Görünüşe göre, iki boyutlu bir dizi '$ return [$ i] []' kullanıyorsunuz. Her girişin tam olarak bir değeri varsa, bunun yerine '$ return [$ i] =' veya '$ return [] =' kullanabilirsiniz. – LSerni

cevap

0

sen $ karşılığında gibi dizi kullanıyorsunuz [$ i] [] böylece gibi beklenmeyen sizin çıkış alıyorsanız

deneyin

$return[$i] = substr(strtr($combination, $conversion), 1, $arraycount); 

yerine

$return[$i][] = substr(strtr($combination, $conversion), 1, $arraycount); 
ait
+0

Thx, ancak bu sadece dizi yapılandırmasını değiştirir, sayı kombinasyonu hala aynıdır. – Greedy

+0

Beklenen ekstra [] öğesini kaldırarak beklenen çıktınızı alabilirsiniz. –

İlgili konular