webForumDet fria alternativet

Ser ni felet i min random-banner kod?

PHP

4 svar · 486 visningar · startad av Ann-Sofie

Medlem sedan mars 2003136 inlägg
Frågan#1

Jag har 5 st olika banners som jag vill ska slumpmässigt byta plats.
Alla fem ska alltid synas och samma banner ska bara visas på ett ställe, dvs det ska alltid vara alla fem olika som syns.

Som koden är nu byter de plats och jag tror inte att samma banner syns mer än en gång men jag fattar inte varför det oftast bara syns 4 banners och bara nån gång ibland alla fem.

Ser ni felet? Säkert superenkelt men jag har blivit totalblind nu...

<?php
    function randomNrs($nr_of_nrs, $low, $high)
    {
        if($nr_of_nrs > $high - $low)
            return false;

        $randomNrs = array();

        for($i=0; $i<$nr_of_nrs; $i++)
        {
            $randomNr = rand($low, $high);
            while(in_array($randomNr, $randomNrs))
            {
                $randomNr = rand($low, $high);
            }
            $randomNrs[$i] = $randomNr;
        }

        return $randomNrs;
    }

   
    ################################################################################

    $banners = array(
    "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner1.jpg' border='0' /></a>", 
    "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner2.jpg' border='0' /></a>", 
   "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner3.jpg' border='0' /></a>", 
    "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner4.jpg' border='0' /></a>", 
     "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner5.jpg' border='0' /></a>",  
	     );

    $nr = randomNrs(5, 0, count($banners));

    echo $banners[$nr[0]] ."<br>"; 
echo $banners[$nr[1]] ."<br>"; 
echo $banners[$nr[2]] ."<br>"; 
echo $banners[$nr[3]] ."<br>"; 
echo $banners[$nr[4]] ."<br>"; 
echo $banners[$nr[5]] ."<br>";  
    
?>
Medlem sedan juni 20034 013 inlägg
#2

Det finns en funktion som heter array_rand som jag rekommenderar att du använder i stället.

<?php

  $banners = array(
    "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner1.jpg' border='0' /></a>",
    "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner2.jpg' border='0' /></a>",
   "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner3.jpg' border='0' /></a>",
    "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner4.jpg' border='0' /></a>",
     "<a href='http://www.aftonbladet.se' target='_blank'><img src='banner5.jpg' border='0' /></a>");

  $rand_nr = array_rand($banners, count($banners);

  foreach ($rand_nr as $nr)
  {
    echo $banners[$nr] ."<br>";
  }

?>
Medlem sedan mars 2003136 inlägg
#3

Tusen tack för din snabba respons!!

Jag testade nu men fick följande felmeddelande:
Parse error: syntax error, unexpected ';' in /usr/home/web42/domains/vigseln.se/public_html/testscript.php on line 18

Rad 18 är: $rand_nr = array_rand($banners, count($banners);

Det funkar ju inte att ta bort ; jag har testat men då klagar den på foreachen på rad 20 vilket är

foreach ($rand_nr as $nr)

Nån idé om vad det beror på?

Medlem sedan mars 2007845 inlägg
#4

Ann-Sofie skrev:

Rad 18 är: $rand_nr = array_rand($banners, count($banners);

Det fattas ett ) i slutet.

$rand_nr = array_rand($banners, count($banners));

Ser bättre ut.

Medlem sedan mars 2003136 inlägg
#5

Nu funkar det perfekt! Tack tack!

265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)