HamatzuMedlem sedan mars 2005232 inlägg Jag har hittat följande kod för att slumpa en rad ifrån en textfil.
Det funger fint men nu vill jag slumpa så att den visar flera samtidigt.
T.ex så att den visar tre rader eller fler. Det går ju givetvis att köra koden tre
gånger men då finns risk för dubletter, och det vill man inte ha.
Hur kan man lösa detta på ett bra sätt?
<?php
$delim = "\n";
$quotefile = "quotes.txt";
// okay, let's get going.
$fp = fopen($quotefile, "r");
$contents = fread($fp, filesize($quotefile));
$quote_arr = explode($delim,$contents);
fclose($fp);
// initiate randomness
srand((double)microtime()*1000000);
// generate random quote index
$quote_index = (rand(1, sizeof($quote_arr)) - 1);
// get quote at $quote_index and return it
$herequote = $quote_arr[$quote_index];
echo $herequote;
?>
tydalMedlem sedan juni 20034 013 inlägg <?
$antalRader = 3;
$fil = "quotes.txt";
$arr = file($fil);
$rnd = array_rand($arr, $antalRader);
foreach ($rnd as $k)
{
echo($arr[$k]);
}
?>
Om du har tillgång till en databas blir det mycket enklare att göra detta. Då kan du skapa en tabell med en kolumn som du kallar citat, sedan lägger du in en rad för varje citat. Sedan kan du hämta valfritt antal citat med SQL-frågan:
SELECT citat FROM citat ORDER BY RAND() LIMIT 4
Där 4 är antalet citat du vill ha ut.
/r Eller enklare blir det inte, som tydal visar. Damn!
HamatzuMedlem sedan mars 2005232 inlägg Jag har tyvärr inte tillgång till databas annars skulle jag gjort så som du skrivit nitro :)
Tack tydal för lösningen! :D
tydal: Jag har inte testat din kod, men borde det inte vara echo($rnd[$k]); ?
tydalMedlem sedan juni 20034 013 inlägg
nitro2k01 skrev:
/r Eller enklare blir det inte, som tydal visar. Damn!
Tänkte mig också databaslösningen först. När man lärt sig SQL blir man ju lätt bortskämd och tycker det borde appliceras överallt. Men så slog det mig att php har gott om funktioner som gör både det ena och det fjärde, prydligt samlade i online-dokumentationen. En snabbkoll bland arrayfunktionerna uppdagade array_rand() som jag i alla fall inte medvetet lagt märke till tidigare.
Men gränsen är ändå inte långt borta. Vill man göra något mer avancerat är det högst lägligt att ta steget till SQL-land.
tydalMedlem sedan juni 20034 013 inlägg
nitro2k01 skrev:
tydal: Jag har inte testat din kod, men borde det inte vara echo($rnd[$k]); ?
Nej, filinnehållet ligger i $arr ($arr = file($fil);)
$rnd är arrayen som innehåller de index som blivit slumpvist utvalda. foreach ($rnd as $k) gör att $rnd loopas igenom och $k sätts till det aktuella värdet i loopen. $k är alltså det index som blivit utvalt, index i arrayen $arr av array_rand().
Själv googlade jag lite, men hittade inte array_rand...
Och se även mitt påpekande ang. koden.
tydalMedlem sedan juni 20034 013 inlägg
nitro2k01 skrev:
Själv googlade jag lite, men hittade inte array_rand...
Google har inte svaret på nåt, men Google kan hjälpa till med att berätta var svaret kan finnas. Vet man redan var svaret finns så går det ju mycket snabbare att gå direkt dit.
Jag gick till http://se.php.net/array och sökte på sidan efter rand. Fullträff direkt. Jag visste i och för sig inte om svaret skulle finnas där. Jag visste bara att om det fanns ett svar så skulle det finnas där.
Php:s online-dokumentation är mycket trevlig.