小编典典

使用PHP,随机配对项目组,不与其自身进行配对,不进行直接配对

algorithm

假设您在数组中有一组项目。

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配对。因此,必须有与项目一样多的关系。


阅读 278

收藏
2020-07-28

共1个答案

小编典典

那这个呢 ?

// 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];
2020-07-28