加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用PHP,随机配对一组项目,而不是与其自身配对,没有直接配对

发布时间:2021-07-06 05:22:54 所属栏目:大数据 来源: https://www.jb51.cc
导读:假设您在数组中有一组项目. 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-pairedL

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

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
)

使用偶数个元素数组以及奇数.

使用Chris’算法更新:

$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];

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读