ホームページ  >  記事  >  バックエンド開発  >  PHP 配列がシャッフルされるときに隣接する重複要素の生成を回避するにはどうすればよいですか?

PHP 配列がシャッフルされるときに隣接する重複要素の生成を回避するにはどうすればよいですか?

王林
王林オリジナル
2024-05-02 10:36:02696ブラウズ

PHP shuffle() は隣接する重複要素を生成する可能性があります。これを回避するには、次の 2 つの方法を使用できます。 a-Hash アルゴリズムを使用します。値ごとにハッシュを生成し、一意のハッシュ値に対応する値のみを保持します。マークとシャッフルを使用する: 使用されているインデックスをマークし、シャッフルする前にマークされたインデックス値を削除します。

PHP 配列がシャッフルされるときに隣接する重複要素の生成を回避するにはどうすればよいですか?

PHP は、配列がシャッフルされるときに隣接する重複要素を回避します

PHP では、shuffle() を使用します配列の順序をシャッフルするのは関数の一般的な要件です。ただし、この関数は隣接する重複要素を生成する可能性があります。これを回避するには、次を使用できます:

実装:

  1. Use a-Hash:
function shuffle_array_avoid_adjacent_duplicates(array &$array) {
    $aHash = [];
    $result = [];
    foreach ($array as $key => $value) {
        $ah = md5($value);
        if (!isset($aHash[$ah])) {
            $aHash[$ah] = true;
            $result[] = $value;
        }
    }
    shuffle($result);
    return $result;
}
  1. マーキングとシャッフルの使用:
function shuffle_array_avoid_adjacent_duplicates(array &$array) {
    $marked = [];
    foreach ($array as $key => $value) {
        $marked[$key] = false;
    }
    while (count($marked)) {
        $key = array_rand($marked);
        $result[] = $array[$key];
        unset($marked[$key]);
        unset($array[$key]);
    }
    shuffle($result);
    return $result;
}

実践例:

$array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

$shuffled_array = shuffle_array_avoid_adjacent_duplicates($array);

print_r($shuffled_array);

出力:

Array
(
    [0] => 5
    [1] => 2
    [2] => 9
    [3] => 10
    [4] => 7
    [5] => 4
    [6] => 3
    [7] => 8
    [8] => 6
    [9] => 1
)

上記のコードは、a-Hash アルゴリズムを使用して、隣接する重複要素を回避し、無秩序な配列を生成します。

以上がPHP 配列がシャッフルされるときに隣接する重複要素の生成を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。