2016-10-12 66 views
1

我一直在爲整個工作日而努力解決這個問題,我無法創建一個既不佔用大量內存也不需要永遠完成的可行解決方案。PHP中兩個陣列的完全獨特的組合

如果我有兩個數組:

$letters = array ('a','b','c','d'); 

$numbers = array (1,2,3,4); 

我怎麼完全獨特的組合?換句話說,因爲這些數組每個都有四個元素,函數應該只返回四個組合,數組中的每個元素只能使用一次。

A1 B2 C3 D4

- 或 -

A2 B4 C3 D1

- 或 -

:使用上述陣列

實施例的組合

A4 B2 C3 D1

...等...

的,我覺得不要把兩個數組的唯一考慮的例子所有。這樣的答案是無效的:

A1 B2 C3 D3

- 或 -

A3 B2 C3 D2

我有一個地獄實時製作一個可以正常工作的功能。

+1

你tr是爲了獲得獨特的組合,還是隻有一組隨機的獨特組合? –

+0

一組組合,其中來自兩個數組的每個元素僅使用一次。 – bsom

回答

1

鑑於陣列都等於長度爲你的榜樣,也許這樣的事情,使用shuffle

<?php 

$letters = array ('a','b','c','d'); 
$numbers = array (1,2,3,4); 

function randmix($a, $b){ 
    shuffle($a); 
    shuffle($b); 
    foreach($a as $i => $val){ 
     $product []= $val.$b[$i]; 
    } 
    return $product; 
} 

print_r(randmix($letters,$numbers)); 
Array 
(
    [0] => d1 
    [1] => a3 
    [2] => c4 
    [3] => b2 
) 
+0

你確定嗎?我使用它時得到了不同的結果。 ;) –

0

事先不洗牌陣列另一種可能性(這並不是說有有什麼不對;只是一種不同的方法):

while ($letters && $numbers) {    // keep going as long as both arrays have values 
    $combination = ''; 
    foreach ([&$letters, &$numbers] as &$array) { 

     // select a random element from each array and then unset it 
     $key = array_rand($array); 
     $combination .= $array[$key]; 
     unset($array[$key]); 
    } 
    $combinations[] = $combination; 
}