2016-10-12 34 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; 
}