Bagaimana untuk mengelakkan menjana elemen pendua bersebelahan apabila tatasusunan PHP dikocok?

王林
Lepaskan: 2024-05-02 10:36:02
asal
735 orang telah melayarinya

PHP shuffle() boleh menjana elemen pendua bersebelahan. Untuk mengelakkan ini, anda boleh menggunakan dua kaedah berikut: Gunakan algoritma a-Hash: hasilkan cincang untuk setiap nilai dan hanya simpan nilai yang sepadan dengan nilai cincang unik. Gunakan tanda dan kocok: Tandakan indeks yang digunakan dan padamkan nilai indeks yang ditanda sebelum dikocok.

Bagaimana untuk mengelakkan menjana elemen pendua bersebelahan apabila tatasusunan PHP dikocok?

Elakkan elemen pendua bersebelahan apabila tatasusunan PHP dikocok

Dalam PHP, adalah keperluan biasa untuk menggunakan fungsi shuffle() untuk merombak susunan tatasusunan. Walau bagaimanapun, fungsi ini mungkin menjana elemen pendua bersebelahan. Untuk mengelakkan perkara ini, kita boleh menggunakan kaedah berikut:

Pelaksanaan:

  1. Gunakan 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;
}
Salin selepas log masuk
  1. Gunakan tanda dan shuffle: 🜎
  2. kes sebenar: 🜎

rreeee

Output:

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;
}
Salin selepas log masuk
Kod di atas menggunakan algoritma a-Hash untuk mengelakkan unsur pendua bersebelahan dan menjana tatasusunan yang tidak teratur.

Atas ialah kandungan terperinci Bagaimana untuk mengelakkan menjana elemen pendua bersebelahan apabila tatasusunan PHP dikocok?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan