Antworten auf deine Fragen:
Neues Thema erstellen

Datenbankabfrage->Array ->zufällig durchmischen

maxxscho

Code-Fan

Hallo Leute!!!

Ich bastle gerade ein kleines Turniertool, und hier will ich nun, dass beim generieren des Turnierbaumes die Teilnehmer und die sich daraus ergebenden Paarungen zufällig erstellt werden.

Ich hab hier mal den Code, ganz vereinfacht. Es funktioniert auch. Was sagt ihr dazu? Gibts da ne bessere Lösung?
PHP:
<?
        //Datenbank auslesen
        $sql = "SELECT * FROM user";
        $result = mysql_query($sql, $link);
        
        //Ergebnis in numerisch indiziertes Array speichern
        $i = 0;
        $teilnehmer = array();
        while($dataset = mysql_fetch_array($result)){
            $teilnehmer[$i] = $dataset["firstname"] . " " . $dataset["lastname"];
            $i++;
        }
        
        //Array zufällig durchmischen und ausgeben
        shuffle($teilnehmer);
        for($i = 0; $i<sizeof($teilnehmer); $i++){
            echo $teilnehmer[$i] . "<br />";
        }
        ?>
Ich hab so das Gefühl, dass diese Methode unschön ist und lege außerdem Wert auf die Meinungen der erfahrenen PHP-Künstler ;)

Gruß
maxx
 

fakerer

Aktives Mitglied

AW: Datenbankabfrage->Array ->zufällig durchmischen

Hi,
wüste nicht was gegen deine Lösung sprechen sollte.
Denk mir auch immer ich spllte das sauerer umsetzen, aber solange es läuft passt es :). Nein so ist es auch nicht aber man sollte sich da glaub ich nicht zu viele Gedanken machen da man immer alles auf 100000... Wege umsetzen kann.

lg
 

sokie

Mod | Web

AW: Datenbankabfrage->Array ->zufällig durchmischen

was soll daran unschön sein?
kürzer könnte man diesen Teil
PHP:
        //Ergebnis in numerisch indiziertes Array speichern
        $i = 0;
        $teilnehmer = array();
        while($dataset = mysql_fetch_array($result)){
            $teilnehmer[$i] = $dataset["firstname"] . " " . $dataset["lastname"];
            $i++;
        }
so
PHP:
        //Ergebnis in numerisch indiziertes Array speichern
        $teilnehmer = array();
        while($dataset = mysql_fetch_array($result)){
            $teilnehmer[] = $dataset["firstname"] . " " . $dataset["lastname"];
        }
notieren.

statt in der Abfrage alle (*) spalten zu selektieren könntest du es auf die beschränken, die du tatsächlich brauchst (firstname,lastname)
das sind allerdings nur feinheiten
 
Zuletzt bearbeitet:

maxxscho

Code-Fan

AW: Datenbankabfrage->Array ->zufällig durchmischen

Ok Leute!!
Danke für die Antworten. Man macht sich halt Gedanken über den produzierten Code, ob es da was besseres gibt. Vor allem als noch etwas unerfahren, will ich persönlich doch gerne Meinungen hören.
@soki: Die SQL-Abfrage mit dem (*) ist nur für diesen Beispielcode ;-)

Gruß
Maxx
 

Chriss1987

me.drinkCoffee();

AW: Datenbankabfrage->Array ->zufällig durchmischen

Hi,

hab da noch eine Anmerkung zur for-Schleife. Hab vor kurzem mal so ein bisschen was zur Performance-Optimierung von php-Scripten gelesen, dort stand u.a., man sollte Funktionen, wenn vermeidbar, möglichst nicht in Abbruchbedingungen verwenden. Kurzes Bsp dazu:
PHP:
<?php
function _count($array)
    {
        echo 'x';
        return count($array);
    }

$array = array(1,2,3);

for ($i=0;$i<_count($array);$i++)
    {
        echo $array[$i];
    }
?>
Ausgabe:
Code:
x1x2x3

lieber auslagern (die Funktion _count() ist nur zur Veranschaulichung)
PHP:
<?php
function _count($array)
    {
        echo 'x';
        return count($array);
    }

$array = array(1,2,3);
$size = _count($array);
for ($i=0;$i<$size;$i++)
    {
        echo $array[$i];
    }
?>
Ausgabe:
Code:
x123

bzw. noch einfacher:
PHP:
<?php
//Array zufällig durchmischen und ausgeben
shuffle($teilnehmer);
foreach($teilnehmer AS $teiln)
    {
        echo $teiln . "<br />";
    }
?>
(Anm.: in foreach kann man weiterhin Funktionen nutzen, so erzeugt z.B.
PHP:
<?php
function _array($array)
    {
        echo 'x';
        return $array;
    }

foreach(_array(array(1,2,3)) AS $array)
    {
        echo $array;
    }
?>
die Ausgabe:
Code:
x123
)

Ist vielleicht bei kleineren Projekten nicht so schlimm mit der Performance, jedoch kann man so von Anfang an Resourcen einsparen.

Schöne Grüße aus dem Sauerland!
Chriss
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Datenbankabfrage->Array ->zufällig durchmischen

man sollte Funktionen, wenn vermeidbar, möglichst nicht in Abbruchbedingungen verwenden.

Genau richtig formuliert: wenn vermeidbar.

Im Beispiel hier ist es aber nicht vermeidbar, da mysql_fetch_* jeweils nur eine Zeile holt, daher muss sie bei jedem Durchlauf sowieso neu aufgerufen werden.


Duddle
 

Chriss1987

me.drinkCoffee();

AW: Datenbankabfrage->Array ->zufällig durchmischen

Genau richtig formuliert: wenn vermeidbar.

Im Beispiel hier ist es aber nicht vermeidbar, da mysql_fetch_* jeweils nur eine Zeile holt, daher muss sie bei jedem Durchlauf sowieso neu aufgerufen werden.


Duddle

Mir ging es dabei nicht um die while-Schleife, sondern um die for-Schleife. In der while-Schleife ist es völlig richtig, da, wie du schon sagtest, nur eine Zeile ausgelesen wird.
In der for-Schleife wird bei jedem Durchlauf die Array-Größe ermittelt und das ist hier unnötig, da das Array nicht geändert wird. (Ok, in so einem kleinen Bsp wird das nicht viel außmachen, aber man sollte sich performancesparendes Programmieren von Anfang an angewöhnen, denn iwann erstellt man evtl auch mal größere Projekte ;) , Performance sparen bedeutet dann auch wiederum Umweltschutz, da weniger Rechenleistung benötigt wird :p ;) )

Schöne Grüße aus dem grünen Sauerland!
Chriss ;)
 

netbandit

Aktives Mitglied

AW: Datenbankabfrage->Array ->zufällig durchmischen

Zur Info vielleicht noch; MySql kann auch mischen
PHP:
$sql = 'SELECT * FROM user ORDER BY RAND()';
Bei größeren Datenbanken würde ich aber darauf verzichten. ;)
 

maxxscho

Code-Fan

AW: Datenbankabfrage->Array ->zufällig durchmischen

Hi,

hab da noch eine Anmerkung zur for-Schleife. Hab vor kurzem mal so ein bisschen was zur Performance-Optimierung von php-Scripten gelesen, dort stand u.a., man sollte Funktionen, wenn vermeidbar, möglichst nicht in Abbruchbedingungen verwenden. Kurzes Bsp dazu:
PHP:
<?php
function _count($array)
    {
        echo 'x';
        return count($array);
    }

$array = array(1,2,3);

for ($i=0;$i<_count($array);$i++)
    {
        echo $array[$i];
    }
?>
Ausgabe:
Code:
x1x2x3
lieber auslagern (die Funktion _count() ist nur zur Veranschaulichung)
PHP:
<?php
function _count($array)
    {
        echo 'x';
        return count($array);
    }

$array = array(1,2,3);
$size = _count($array);
for ($i=0;$i<$size;$i++)
    {
        echo $array[$i];
    }
?>
Ausgabe:
Code:
x123
bzw. noch einfacher:
PHP:
<?php
//Array zufällig durchmischen und ausgeben
shuffle($teilnehmer);
foreach($teilnehmer AS $teiln)
    {
        echo $teiln . "<br />";
    }
?>
(Anm.: in foreach kann man weiterhin Funktionen nutzen, so erzeugt z.B.
PHP:
<?php
function _array($array)
    {
        echo 'x';
        return $array;
    }

foreach(_array(array(1,2,3)) AS $array)
    {
        echo $array;
    }
?>
die Ausgabe:
Code:
x123
)

Ist vielleicht bei kleineren Projekten nicht so schlimm mit der Performance, jedoch kann man so von Anfang an Resourcen einsparen.

Schöne Grüße aus dem Sauerland!
Chriss

Versteh ich das jetzt richtig?
Das
PHP:
<?php
$array = array(1,2,3);
for($i=0; $i<sizeof($array); $i++){
    echo $array[$i];
}
?>
... ist von der Performence her nicht so gut wie das hier?
PHP:
<?php
$array = array(1,2,3);
$size = sizeof($array);
for($i=0; $i<$size; $i++){
    echo $array[$i];
}
?>
Da bei der ersten Version ja bei jedem Schleifendurchlauf die Funktion "sizeof()" aufgerufen wird. Funktionieren tut ja beides.
 

saila

Moderatorle

AW: Datenbankabfrage->Array ->zufällig durchmischen

Hi,

ich würde mir mal das genauer ansehen, was @netbandit schon mitgeteilt hat ;)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben