Verwirrendes Problem mit srand und array_rand

Alles, was PHP betrifft, kann hier besprochen werden.

Verwirrendes Problem mit srand und array_rand

Postby Le Thermo » 06. April 2006 15:18

Hallo zusammen,

ich habe ein merkwürdiges Problem, bei ihr mir hoffentlich helfen könnt. Im Array $Fts sind über 1000 Verweise zu Fotos gespeichert. Aus diesen sollen zwei zufällig ausgewählt werden. Ich mache das so:

Code: Select all
srand((double)microtime()*1000000);
$ZZ=array_rand($Fts,2);


Nun passiert aber folgendes. Immer wenn ich die Seite neu lade, sehe ich zwei andere Fotos. Allerdings wiederholen sich einige Fotos sehr oft. Ein Bild bspw. erscheint ungefähr bei jedem dritten Aufruf. Wie kann das denn sein? Kann mir vielleicht jemand helfen, srand zu optimieren?

Vielen Dank im voraus,

gruß,

Christian
Le Thermo
 
Posts: 20
Joined: 16. November 2005 09:43

Postby Wiedmann » 06. April 2006 16:35

Mal abgesehen davon das srand() eh überflüssig ist, dürfte das einfach "Zufall" sein.

Ansonsten schau halt, ob evtl. ein Bug zur Funktion array_rand() gemeldet ist.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby KingCrunch » 06. April 2006 19:54

Ich tippe auf Rundungsfehler, die halt bestimmte Kombinationen besonders trifft, allerdings in Bereichen jenseit von 0,000..1% häufiger, also: Kategorie "messbarer Zufall" ;)
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Le Thermo » 08. April 2006 21:11

Erstmal vielen Dank für die Hilfe! Ich denke, dass mein Problem ganz woanders liegt.

$sql="SELECT * FROM fotos";
$result=mysql_query($sql);
$i=0;
while ($row=mysql_fetch_array($result))
{
$Fts[$i][0]=$row["Name"];
$Fts[$i][1]=$row["Verzeichnis"];
$i++;
}

Geht das anders besser? Mir ist nämlich aufgefallen, dass in dem Array Fts nicht immer die gleichen Elemente sind, manche sind doppelt und dafür fehlen dann manche. Ich finde das sehr merkwürdig, da ich erwarte, dass das Array Fts immer gleich sein müsste, sofern sich die Datenbank fotos nicht ändert.

Kann mir da vielleicht jemand helfen?

Danke!
Le Thermo
 
Posts: 20
Joined: 16. November 2005 09:43

Postby KingCrunch » 10. April 2006 10:23

Stimmt scho, allerdings finde ich bei genannten Code-Auszug keinen Anhaltspunkt für ein Fehlverhalten... Wird $Fts vorher bzw nachher noch irgendwie manipuliert? Du könntest stattdessen versuchen, ob es anstelle von mysql_fetch_array() mit mysql_fetch_assoc() funktioniert, da du ja sowieso nur die assozierten Indizes verwendest und... Na, ja, ein wirklicher Grund, warum es damit funktionieren sollte, fällt mir nicht ein...
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Wiedmann » 10. April 2006 11:21

Geht das anders besser?

Im Prinzip ja.

Im Array $Fts sind über 1000 Verweise zu Fotos gespeichert. Aus diesen sollen zwei zufällig ausgewählt werden.

Wieso liest du aus der DB überhaupt 1000 Einträge aus, wenn du nur 2 zufällige benötigst...

Ohne Gewähr ;-) :
Code: Select all
<?php
    $link = mysql_connect('localhost', 'root', '') or die(mysql_error());
    mysql_select_db('foo', $link) or die(mysql_error());

    $sql = "SELECT `Name`, `Verzeichnis`
            FROM `fotos`
            ORDER BY RAND()
            LIMIT 2";
    $result = mysql_query($sql, $link) or die(mysql_error());

    $Fts = array():
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        $Fts[] = $row;
    }

    mysql_free_result($result);
    mysql_close($link);

    echo '<pre>';
    echo var_dump($Fts);
    echo '</pre>';
?>
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby KingCrunch » 10. April 2006 12:12

Code: Select all
ORDER BY RAND()

das geht so? Dachte immer, nach "ORDER BY" is nur "ASC" oder "DESC" erlaubt...
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Wiedmann » 10. April 2006 12:17

Dachte immer, nach "ORDER BY" is nur "ASC" oder "DESC" erlaubt...

Erst einmal musst ja sagen, nach was überhaupt ordnen willst. Zusätzlich kannst du dann aber noch die Richtung angeben.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby KingCrunch » 10. April 2006 12:41

Joa, aber selbst das "was" fehlt mir grad :(
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby gfaust » 10. April 2006 19:54

Hallo,

das genannte Beispiel ergibt, das von Dir gewünschte Ergebnis, so wie Du es möchtest.

s.a. (MySQL-Referenz):

http://dev.mysql.com/doc/refman/4.0/de/mathematical-functions.html

Guido
gfaust
 
Posts: 41
Joined: 06. December 2005 18:31

Postby Le Thermo » 12. April 2006 13:47

Vielen, vielen Dank für die Hilfe. Jetzt läuft alles wunderbar!
Le Thermo
 
Posts: 20
Joined: 16. November 2005 09:43


Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest