Maison  >  Article  >  développement back-end  >  Comment éviter de générer des éléments en double adjacents lorsque les tableaux PHP sont mélangés ?

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

王林
王林original
2024-05-02 10:36:02736parcourir

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

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

Sortie :

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

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!

Déclaration:
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