2 votes

Lien aléatoire sans répétition - Session utilisateur

J'ai 7 liens et j'ai besoin d'afficher un lien par page ou vue de page sans répéter les liens des vues précédentes.

Les liens doivent être affichés de manière aléatoire et les 7 liens doivent être montrés à l'utilisateur s'il/elle visite 7 pages, (un par page), si l'utilisateur visite plus de 7 pages le cycle recommencera.

J'espère que la question est claire. Merci et désolé pour mon anglais Daniel

3voto

Wesley van Opdorp Points 8536

Vous devriez stocker les liens précédemment visités dans la session ou la base de données. Vous pouvez simplement mélanger les liens et les parcourir. Ensuite, vérifiez s'il a déjà été visité - et continuez jusqu'à ce que vous en trouviez un. Si vous n'en trouvez pas (après avoir terminé l'itération), vous pouvez supposer que les 7 liens ont été visités, et vous pouvez réinitialiser la session/base de données.

Petit exemple de code (note : pseudocode).

$aLinks = array(1, 2, .., ..);
shuffle($aLinks);

$sLinkToShow = null;
foreach($aLinks as $aLink) {
    if (seenBefore()) continue;
    $sLinkToShow = $aLink['link'];
}

if (is_null($sLinktoShow)) { 
    // seen all
}
echo $sLinkToShow;

0voto

deceze Points 200115

Stockez les liens mélangés dans la session et utilisez-les un par un :

$links = array('a', 'b', 'c', …);

if (empty($_SESSION['links'])) {
    // first time visit, populate random order in session
    $_SESSION['links'] = array_keys($links);
    shuffle($_SESSION['links']);
}

// pop first link
$link = array_shift($_SESSION['links']);

// cycle array; or don't, to create a different order next time
$_SESSION['links'][] = $link;

// output link
echo $links[$link];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X