Comment éviter de générer des éléments en double adjacents lorsque les tableaux PHP sont mélangés ?

王林
Libérer: 2024-05-02 10:36:02
original
731 Les gens l'ont consulté

PHP shuffle() peut générer des éléments en double adjacents. Pour éviter cela, vous pouvez utiliser les deux méthodes suivantes : Utiliser l'algorithme a-Hash : générer un hachage pour chaque valeur et ne conserver que la valeur correspondant à la valeur de hachage unique. Utiliser mark et shuffle : marquez l'index utilisé et supprimez la valeur d'index marquée avant de mélanger.

Comment éviter de générer des éléments en double adjacents lorsque les tableaux PHP sont mélangés ?

Évitez les éléments en double adjacents lorsque le tableau PHP est mélangé

En PHP, il est courant d'utiliser la fonction shuffle() pour mélanger l'ordre du tableau. Cependant, cette fonction peut générer des éléments en double adjacents. Pour éviter cela, nous pouvons utiliser la méthode suivante :

Mise en œuvre :

  1. Utiliser un-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;
}
Copier après la connexion
  1. Utiliser mark et shuffle :
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;
}
Copier après la connexion

Cas réel :

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

$shuffled_array = shuffle_array_avoid_adjacent_duplicates($array);

print_r($shuffled_array);
Copier après la connexion

Sortie :

Array
(
    [0] => 5
    [1] => 2
    [2] => 9
    [3] => 10
    [4] => 7
    [5] => 4
    [6] => 3
    [7] => 8
    [8] => 6
    [9] => 1
)
Copier après la connexion

Le code ci-dessus utilise l'algorithme a-Hash pour éviter les éléments en double adjacents et générer un tableau désordonné.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal