在整个工作日里,我一直在努力解决这个问题,我无法制定一个既不占用大量内存也不会永远完成的可行解决方案。
如果我有两个阵列:
$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
我有一段时间制作一个正常运作的功能。
答案 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;
}