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

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

王林
リリース: 2024-05-02 10:36:02
オリジナル
757 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート