1

サンプル配列:

$player = array("lawrence","joey","jason","joel","bianca","paulo","albert");

配列をそれ自体に一致させて、重複した値を取得せずにそれ自体から値を取得したい:

"lawrence" => "lawrence"; //must not contain itself
"joey" => "lawrence"; //must not assign value already assigned to that value

一言で言えば 、交換ギフトアルゴリズムのようなものです

4

2 に答える 2

2
$player = array("lawrence","joey","jason","joel","bianca","paulo","albert");
shuffle($player);
$player2 = $player;
array_unshift($player2, array_pop($player2));

$combined = array_combine($player, $player2);

それをシャッフルし、1 ずつ転置して、確実に一意の一致を作成し、再結合します。

于 2013-11-04T08:02:38.617 に答える
0

この投稿を見つけました: PHP を使用して、アイテムのグループをランダムにペアリングします。

そして、一番の答えはとても良さそうです:https://stackoverflow.com/a/3758775/623952

// 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;

それは私に与えます:

Array
(
    [lawrence] => joel
    [joel] => joey
    [joey] => jason
    [jason] => paulo
    [paulo] => albert
    [albert] => bianca
    [bianca] => lawrence
)

ギフト交換で「その人が自分で選択した」かどうかを確認するために、そこにチェックが必要になる場合があります.

于 2013-11-04T08:01:36.877 に答える