PHP中两个数组完全独特的组合

时间:2016-10-12 18:51:40

标签: php arrays

在整个工作日里,我一直在努力解决这个问题,我无法制定一个既不占用大量内存也不会永远完成的可行解决方案。

如果我有两个阵列:

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

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

如何获得完全独特的组合?换句话说,由于这些数组各有四个元素,因此该函数应仅返回四个组合,数组中的每个元素仅使用一次。

使用上述数组的示例组合:

  

a1 b2 c3 d4

-OR -

  

a2 b4 c3 d1

-OR -

  

a4 b2 c3 d1

...等...

我发现的所有示例都没有考虑两个阵列的唯一性。这样的答案无效:

  

a1 b2 c3 d3

-OR -

  

a3 b2 c3 d2

我有一段时间制作一个正常运作的功能。

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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;
}