Wichteln! :) Aber wie?

nordi

Erfahrenes Mitglied
Hi Leute,

die Weihnachtszeit steht ja bald wieder vor der Tür und da hab ich mir überlegt, dass man ja mal wieder "Wichteln" könnte. Leute die das jetzt nicht kennen, hier ne kleine Erläuterung..

Jeder der mitmacht, schreibt seinen Namen auf nen Zettel und wirft diesen in einen Hut. Nacher zieht jeder einen Zettel aus dem Hut und muss demjenigen ein Geschenk von ca. 4 EUR kaufen. Man darf aber nicht verraten, wen man gezogen hat.. Toll, oder? Am "Stichtag" legt man dann das Geschenk auf nen Tisch und schreibt den Namen drauf, an wen es bestimmt ist! Wow... wie aufregend :)

So, will das auf meiner Homepage machen. Also das Formular, wo man sich einschreiben kann, ist ja easy! Aber wie würdet ihr die Funktion schreiben, dass jeder von den Leuten einen Namen zugewiesen bekommt und möglichst nicht den eigenen!?
 
Du hast wohl eine Tabelle mit den Teilnehmern, die sich eingetragen haben. Die Anmeldefrist muss natürlich auch gesetzt werden (z.B. bis 12.12.2006), damit die Auswertung beginnen kann. Die sollte von dir "in Gang gebracht" werden, sprich, du rufst ein Script auf, einmalig ;)

Wichtigi st, dass die Tabelle nicht nur die UserID speichert, sondern ihm ein Wichtel-Partner (keine Ahnung wie ich es sonst nennen soll) zugewiesen wird. Die Tabelle könnte dann so aussehen:

Wichteln
--------------------------------
UserID | WichtelUserID
---------------------------------
12 | NULL
53 | NULL
1 | NULL
289 | NULL

Dein Script sollte nun alle UserID's in 2 Array's schreiben. $users und $wichtelusers.
Dann mischt du das Array $wichtelusers mit shuffle() - srand solltest du auch nehmen
PHP:
<?php
//Beispiel aus dem Manual
$numbers = range(1, 20);
srand((float)microtime() * 1000000);
shuffle($numbers);
foreach ($numbers as $number) {
    echo "$number ";
}
?>
Dann speicherst du die Array's wieder ab:
PHP:
<?php
for($i = 0; $i < $count($users); $i++)
{
  $sql ="UPDATE wichteln SET wichteluserid = ".$wichtelusers[$i]." WHERE userid = ".$users[$i];
  mysql_query($sql)
}

Und schon sollte jeder der mitmacht einen Partner haben, dem er was schenken soll ;)

Wichteln
--------------------------------
UserID | WichtelUserID
---------------------------------
12 | 1
53 | 289
1 | 12
289 | 53

Vielleicht nochmal vergleichen, ob sich was bei einem nicht geändert hat, kenn die Funktion selber noch nicht ;)


Gruß Radhad
 
Zuletzt bearbeitet:
Das ist eigentlich nicht schwer: würfel einfach alle Namen durcheinander und weise jedem einen Namen zu. Hat jemand sich selbst bekommen, einfach noch mal würfeln. Anders wird es doch auch nicht mit richtigen Zetteln gemacht.
 
Hey,

lasse jeden Wichtler sich selber in einer bspw. TXT Datei speichern. Für jeden Wichtler eine neue Zeile. Danach shuffelst du dieses Array und schreibst es in eine neue TXT Datei.
PHP:
$datei = fopen("wichtler.txt", r);            
$stack = array();
while ($zeile= fgets($datei,1000))
        {
        array_push($stack, "$zeile");        
        }
shuffle($stack);
$STRING = implode("", $stack);
$mixedWichtler = fopen("wichtlerMixed.txt", "r+");
fputs($mixedWichtler, $STRING);
fclose($mixedWichtler);
Nun brauchst du nur noch jedem Wichtler den in der nächsten Zeile stehenden Wichtler zuordnen als Wichtelpartner, und dem letzten Wichtler einfach den ersten Wichtler. So bekommt keiner sich selbst und es ist wirklich durcheinander gewürfelt.

Vielleicht hilfts,
frohes Wichteln:)

benchmark
 
Hallo Ihr lieben!!
Also, ich muss gleich gestehen, ich bin absoluter laie was das alles angeht. Nun suchen aber eine Freundin und ich genau sowas für unser Forum zum Wichteln, aber ich hab keine Ahnung was ich wie wo machen muss....
Könnt Ihr mir bitte helfen Lasst mich nicht dumm unterm Weihnachtsbaum sitzen!

Danke im Vorraus!!
LG
Jessi
 
@benchmark:
Die Idee, die Liste der Wichtler zuerst zu shufflen und dann jedem den jeweils nächsten der Liste zuzweisen, find ich sehr clever!

@Schnuly:
Einige Vorschläge findest du ja in diesem Thread. Grundkenntnisse einer Skriptsprache sind nötig.
 
Zurück