Antworten auf deine Fragen:
Neues Thema erstellen

Eine Funktion per Zufall auswählen

Robbyn-

PHP / Flex Programmierer

Hy
Ich habe ein folgendes Problem zwar habe ich viele verschiedene Beispiele dieser art bereits gesehen mit der Funktion rand() aber hauptsächlich nur arrays wo texte enthalten sind was mir nicht viel bringt. Und zwar soll ein user wenn er die Seite betritt per ZUfall eine Belohnung bekommen und diese ganzen Belohnungen die ich habe sind alle in funktionen verfasst. So wie kann ich das per Zufall ausgeben das der eine User diese funktion erhällt ein anderer die andere.

Mfg.Robbyn
 

sokie

Mod | Web

AW: Eine Funktion per Zufall auswählen

da gibts eine reihe von Möglichkeiten per Zufall funktionen auszuführen.
du könntest es mit dem Ergebnis aus rand() zum Beispiel mit einem switch machen:
PHP:
$nummer = rand(0,2);
switch ($nummer){
   case 0: 
     machwas();
     break;
   case 1:
     machwasanderes();
     break;
   case 2:
     nochwasanderes();
     break;
}
 

Robbyn-

PHP / Flex Programmierer

AW: Eine Funktion per Zufall auswählen

achso ja siehste auf so eine möglichkeit bin ich noch garnicht gekommen das wäre wirklich mal was gutes. Danke werde es gleich ausprobieren.

Mfg. Robbyn
 

lostboi

Nicht mehr ganz neu hier

AW: Eine Funktion per Zufall auswählen

Wenn Du eine große Anzahl von Funktionen (Geschenken) hast, dann wird dieser Switch - Block sehr groß (außer, Du erzeugst ihn variabel).
Es würde sich anbieten, die Namen der Geschenkfunktionen in einem Array zu speichern und dann per rand() einen Funktionsnamen aus dem Array auszuwählen. Anschließend könntest Du z.B. mit require_once($funktionsname'.php') die Datei einbinden, welche die entsprechende Funktion enthält. (Vorrausgesetzt, Du hast pro Funktione eine Datei) Anschließend könntest Du dann mit eval() oder call_user_func() die eingebundene Funktion aufrufen. Das setzt lediglich vorraus, das der Array Eintrag auch so lautet wie der Funktionsname.

Das ganze könnte man auch noch weiter aufbohren, indem man das Array mit den Geschenkfunktionen dynamisch aufbaut aus einer Dateiliste oder einer Datenbanktabelle.

Grüße LostBoi


P.s. Bei näheren Fragen o.ä. kann ich auch Codebeispiele anbieten. Hab das jetzt nur eben ausm Kopf runter skizziert.
 

Robbyn-

PHP / Flex Programmierer

AW: Eine Funktion per Zufall auswählen

P.s. Bei näheren Fragen o.ä. kann ich auch Codebeispiele anbieten. Hab das jetzt nur eben ausm Kopf runter skizziert.

Kein Problem für Beispiele bin ich immer offen genauso für neue Ideen. Aber was du mir gerade erklärt hast klang wirklich von überall hergeholt^^. Aber natürlich ziehe ich jede Lösung in betracht.

Mfg.Robbyn
 

lonelyhawk

Nicht mehr ganz neu hier

AW: Eine Funktion per Zufall auswählen

wenn du nur wenige funktionen hast, ist der vorschlag von sokie sicher eine der besten/einfachsten. wenn es viele sind, könntest du das ganze dynamisch machen, wie lostboi schon angedeutet hat, also z.b. so:
PHP:
$nummer = rand(0,99);        // es wird eine zufallszahl zwischen 0 und 99 gewählt
switch ($nummer){            // switch wird gestartet
   for($c=0;$c<100;$c++){    // jetzt gehst du alle möglichen fälle durch, also von $nummer = 0 bis $nummer = 99.
     case $c:                  // $c steht dabei für die jeweilige zahl.
       function $c();          // dann wird die jeweilige funktion zur richtigen zahl ausgewählt, also function 1, function 2 usw... 
       break;
   }
}
hoffe es sind trotz der schnelle nicht all u viele fehler drin...

den vorschlag mit den einzelnen datein würde ich persönlich nicht verfolgen, obwohl er auch möglich ist.
 

lostboi

Nicht mehr ganz neu hier

AW: Eine Funktion per Zufall auswählen

... Aber was du mir gerade erklärt hast klang wirklich von überall hergeholt^^...

So von "überall" her geholt ist das nicht... Es kommt eben stark darauf an, wie flexibel Du das ganze halten willst. Dazu solltest Du Dich fragen, wie häufig kommt es vor, das die Geschenkfunktionen an sich sich ändern oder neue hinzu kommen bzw. alte wegfallen.
Je flexibler Du das ganze anlegst, desto weniger arbeit hast Du anschließend bei der Pflege dieser Sachen.
So, wie ich es angedacht habe brauchst Du später einfach nur in einem Ordner eine Datei abzulegen, welche die neue Funktion enthält und sie wird automatisch mit eingebunden.
Ich hatte vorhin schon angefangen mal eine Lösung für das Problem zu schreiben. Werde Dir das hier posten, wenn ichs fertig habe.
Ist Dein Projekt Objektorientiert oder arbeitest Du nur prozedural mit Funktionen?

Beste Grüße
LostBoi
 

netbandit

Aktives Mitglied

AW: Eine Funktion per Zufall auswählen

Hier, veilleicht hilft es ja weiter (die letzten 3 Zeilen, den Rest kannst Du ignorieren):

PHP:
<?php
// Funktionen sind nur zum testen da
function zum_ersten(){
         echo 'zum ersten';
}
function zum_zweiten(){
         echo 'zum zweiten';
}
function zum_dritten(){
         echo 'zum dritten';
}
// Funktionen ende

$meine_funktionen=array('zum_ersten', 'zum_zweiten', 'zum_dritten'); // hier die Funktionsnamen rein
$schluessel_zufall=rand(0,count($meine_funktionen)-1);
call_user_func($meine_funktionen[$schluessel_zufall]);
?>
ggf. musst Du noch Parameter übergeben, kannst Du hier nachlesen wie:
 
Zuletzt bearbeitet:

lostboi

Nicht mehr ganz neu hier

AW: Eine Funktion per Zufall auswählen

So, ich hab Dir mal eine Funktion gebastelt, die Dir die komplette Arbeit abnehmen könnte.

Die Funktion, welche per Zufall eine Geschenkfunktion aufruft:

PHP:
<?php

// Aufruf der Funktion
print_r(loadRandomPresent('D:\xampp\htdocs\tuts\dyn_fkt\presents'));

/**
 * Die Geschenkfunktionen sind in einzelnen Dateien in
 * einem gesonderten Ordner gespeichert. Dabei heißen die Funktionen so,
 * wie die Dateien ohne Endung
 * Bsp.: function giveBonus()  ist in der Datei giveBonus.fkt.php gespeichert.
 */
function loadRandomPresent($presentDir) {
    if(is_dir($presentDir)) { 
        $dirHandle = opendir($presentDir);
        $count = 0;
        while(($file = readdir($dirHandle)) !== false) { // alle Funktionsdateien im angegebenen Verzeichnis einlesen
            if(($file != '.') && ($file != '..')) { 
                $fTmp = explode('.',$file);        // Die Endungen abtrennen, so das nur noch die Dateinamen vorhanden sind. Diese dann in ein Array schreiben.
                $fktArr[$count] = $fTmp[0];
                $count++;
            }
        }
    }
    
    $fkt = $fktArr[rand(0,(count($fktArr))-1)];  // aus dem Funktionsarray per Zufall einen ArrayKey raussuchen und den dazugehörigen Funktionsnamen merken
    require_once($presentDir.'/'.$fkt.'.fkt.php'); // Die Datei mit der Funktion einbinden
    return call_user_func($fkt);    // die Bonusfunktion aufrufen und den Rückgabewert an den aufrufenden Programmteil übergeben
}

?>
Die Funktionen, welche per Zufall aufgerufen werden sehen dann so aus:
Bonusfunktionen sollten kein direktes echo oder eine andere Ausgabe erzeugen, da diese automatisch in der Seite auftaucht und nicht mehr als Rückgabewert gefangen werden kann.
PHP:
<?php

function giveBonus() {
    // hier passiert irgendwas... bis zum Rückgabewert
    return "Ich gebe einen Bonus";
}

?>
Ich hoffe, das ist nicht zu kompliziert für Deine Anforderungen oder liefert zu viel Overhead.
Der Vorteil ist, das Du einfach die Bonusfunktionen in dem entsprechenden Ordner hinzufügen oder entfernen kannst und Dein Programm diese eigenständig auswählen kann.

Beste Grüße
LostBoi
 

Robbyn-

PHP / Flex Programmierer

AW: Eine Funktion per Zufall auswählen

Ohh WOW also ich danke euch allen ersteinmal für die ganze Arbeit die ihr dafür geleistet habt und werde es auch gleich ausprobieren. Um der warheit zu entsprechen wird es sehr viele geschenk funktionen sein und sie werden objektorientiert angelgt um eure fragen hinsichtlich dies zu beantworten. Ich danke euch allen für die Codeschnipsle und werde versuchen diese auch einszubauen.

Mfg.Robbyn
 

lostboi

Nicht mehr ganz neu hier

AW: Eine Funktion per Zufall auswählen

Moin Moin Robbyn-

Im Falle einer OOP Anlage der Funktionen drängt es sich ja geradezu auf, die Funktionen jeweils als Methode einer Klasse zu implementieren. Dann würde es sich, bei einer Vielzahl von Geschenken ggf. auch anbieten, die Klassen nach Geschenkkategorien aufzuteilen.

Bleibt nach wie vor das "Problem" mit dem zufälligen Auswählen und dem anschließenden automatischen laden.
Für OOP gibt es da allerdings Möglichkeiten, die mit PHP5 gekommen sind.
Zum einen wäre da PHP.net - spl_autoload und dies hier ist eine kurze Beschreibung zum .

Vielleicht hilft Dir das Schlussendlich auch noch weiter.

Es würde mich persönlich interessieren, wie Deine Implementierung am Ende aussieht ;)

Beste Grüße
LostBoi
 

Robbyn-

PHP / Flex Programmierer

AW: Eine Funktion per Zufall auswählen

Ja da habe ich mir auch schon gerade den Kopf darüber zebrochen aber an spl_autoload habe ich auch schon gedacht ob du es glaubst oder nicht. Ich werde es hier im Forum sofort hinschreiben wenn ich es hinbekommen habe.

Mfg.Robbyn
 

lostboi

Nicht mehr ganz neu hier

AW: Eine Funktion per Zufall auswählen

Eine andere, ganz abstrakte, Möglichkeit wäre es auch noch, die Geschenkfunktionen in einer Datenbank abzulegen.
Dort würdest Du dann auch ohne großen Aufwand Kategorien bilden können. Den Quelltext der Funktionen könntest Du in einem TEXT oder LONGTEXT Feld ablegen. Das zufällige Auswählen einer Funktion könntest Du dann von der Datenbank z.B. über einen Trigger machen lassen. Wenn Du den Quelltext der Funktion dann aus der DB geladen hast, kannst Du diesen über eval() ausführen.

Die Frage bleibt nach wie vor, wie viel Aufwand Du betreiben willst ;)

Gruß
LB
 

Robbyn-

PHP / Flex Programmierer

AW: Eine Funktion per Zufall auswählen

Nun es soll kein 0815 Projeckt werden es soll schons eine zeit dauern und auch ordentlich werden zeit hat in diesem Projekt überhaupt keine Bedeutung.
Und was meinst du mit Trigger sagt mir imm Moment nichts?

Mfg.Robbyn
 

lostboi

Nicht mehr ganz neu hier

AW: Eine Funktion per Zufall auswählen

Wie bereits angedeutet, ist bei der Wahl der Technik vor allem auch die Frage zu stellen, wie einfach Du das ganze pflegen möchtest.

Zum Thema Trigger unter MySQL kannst Du hier nachlesen: MySQL 5 Manual : Trigger

Eine sog. Stored Procedure könnte Dir da aber auch weiter helfen. MySQL 5 Manual : Stored Procedure

Wobei der Unterschied zwischen beiden ist, das ein Trigger ausgelöst wird (er "schießt"), wenn eine bestimmte Aktion auf der Tabelle auf der er liegt, ausgeführt wird. Eine Stored Procedure hingegen ist einfach eine, in der Datenbank gespeicherte Routine, welche bestimme SQL Befehle und / oder Funktionen ausführt.

Grüße
LostBoi
 
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.635
Beiträge
1.538.457
Mitglieder
67.558
Neuestes Mitglied
StarsMan
Oben