Forum Clubic

Php liste de liens aléatoire

Salut,
j’aimerais qu’on m’aide un peu pour un random. J’ai metton 35 liens possibles sur mon site web et je voudrais faire un genre de boite avec un menu qui affiche metton 8 liens aléatoirement. Il n’y a pas de trouble pour faire afficher 1 lien à la fois … mais pour 8 composer entre des

  • je suis bloquer. Alors si qqn peut m’aider …

    Merci

  • Si tes 8 liens sont dans un tableau (un array) :

    echo '<ul>' . "\n";
    foreach($tableau_de_lien as $lien_courant) {
    	echo '<li>', $lien_courant, '</li>', "\n";
    }
    echo '</ul>' . "\n";
    

    En effectuant une boucle composée de 8 itérations dans laquelle à chaque fois tu effectues un random sur le tableau et y supprime le rang qui a été choisi ?

    
    <?php
    $nbRand = 3;
    $arrayDone = array();
    $arrayData = array( 'lien1', 'lien2', 'lien3', 'lien4', 'lien5' );
    $maxRand = count( $arrayData ) - 1;
    $tmpRand = 0;
    
    // $nbRand <= count( $arrayData )
    if( $nbRand <= $maxRand + 1 ) {
     echo '<ul>' . "\n";
     for( $i = 0; $i < $nbRand ; $i++ ) {
      while( in_array( $tmpRand = rand( 0, $maxRand ), $arrayDone ) );
      $arrayDone[] = $tmpRand;
      echo '<li>', $arrayData[ $tmpRand ], '</li>', "\n";
     }
     echo '</ul>' . "\n";
    } else {
     echo 'Trop de résulats demandé pour le nombre de valeur possible';
    }
    ?>
    
    

    Si il te falais le code pour faire tes rands voilà, ya plusieur solutions bien sur :slight_smile:
    Edité le 11/02/2008 à 17:56

    Tes liens sont stockés dans une base mysql ? Si c’est le cas on peut gérer ça directement en sql : c’est quand même moins contraignant !

    Hehe merci beaucoup … je m’attendais pas à une réponse aussi claire … merci

    Merci, très bon code…
    Je l’utilise pour des bannières de partenaires comme ceci :

    
    <?php
    $nbRand = 5;
    $arrayDone = array();
    $arrayData = array(
    '<a href=# target=_blank><img src=# border=0><br>Bannière 1</a>',
    '<a href=# target=_blank><img src=# border=0><br>Bannière 2</a>',
    '<a href=# target=_blank><img src=# border=0><br>Bannière 3</a>',
    '<a href=# target=_blank><img src=# border=0><br>Bannière 4</a>',
    '<a href=# target=_blank><img src=# border=0><br>Bannière 5</a>'
    );
    $maxRand = count( $arrayData ) - 1;
    $tmpRand = 0;
    if($nbRand != $maxRand+1) {
    // Pour pouvoir afficher moins de liens que le nombre réel, remplacez par :
    // if($nbRand >= $maxRand+1)
     echo 'Erreur, vous affichez ', $nbRand, ' liens,
     alors que la liste en comporte ', $maxRand+1, ' !'; 
     } else {
     for( $i = 0; $i < $nbRand ; $i++ ) {
     while( in_array( $tmpRand = rand( 0, $maxRand ), $arrayDone ) );
     $arrayDone[] = $tmpRand;
     echo $arrayData[ $tmpRand ], '<br><br>';
    }} 
    ?>
    
    

    Ca fonctionne très bien !
    (J’ai fait une petite amélioration permettant de savoir le nombre nbRand à mettre en cas d’erreur, afin de ne pas tout recompter manuellement… mettre if($nbRand >= $maxRand+1) si vous voulez pouvoir afficher moins de liens que le nombre réel)
    Edité le 08/09/2010 à 10:38