假设您在数组中有一组项目。
A,B,C,D,E,F,G,H
使用PHP,如何将字母随机配对在一起而不将其与自己的副本配对?
如:
A->pairedLetter = G B->pairedLetter = C C->pairedLetter = E D->pairedLetter = A E->pairedLetter = B F->pairedLetter = D G->pairedLetter = F
等等…
编辑:哦,而且,如果A与F配对,则F不能与A配对。因此,必须有与项目一样多的关系。
那这个呢 ?
// input array $arr = array('A','B','C','D','E','F'); // result array $res = array(); // get first element and save it $first = $ele1 = array_shift($arr); while(count($arr)) { // get random element $ele2 = array_rand($arr); // associate elements $res[$ele1] = $arr[$ele2]; // random element becomes next element $ele1 = $arr[$ele2]; // delete the random element array_splice($arr, $ele2, 1); } // associate last element woth the first one $res[$ele1] = $first; print_r($res);
输出:
Array ( [A] => B [B] => F [F] => E [E] => D [D] => C [C] => A )
适用于偶数个元素数组以及奇数个元素。
使用克里斯的算法进行更新:
$arr = array('A','B','C','D','E','F'); shuffle($arr); $res=array(); for($i=0;$i<count($arr);$i++) { $res[$arr[$i]] = $arr[$i+1]; } $res[$arr[count($arr)-1]] = $arr[0];