Zufallszahlen von klein nach groß sortieren

  • Hey,

    ich habe mal ein kleines Lottoscript geschrieben , welches zahlen zufällig auswählt.
    Nun stehen diese zahlen aber nicht sortiert sondern querbet.

    Wie kann man denn diese von Klein nach groß sortieren?

    Mein script:

    zur date()-funktion:

    PHP
    echo "Wir haben jetzt: ".date("h:m:s");


    dort gibt der mir 11:07:34 aus antstatt 11:52:20 Warum denn dass?

    Gruß,
    Stef

    4 Mal editiert, zuletzt von Stef (31. Juli 2016 um 11:52)

  • Zum sortieren möchte ich mein 15 Jahre altes Script lieber nicht hier rein stellen. Ich warte mal was es da so geben wird ;)
    Meines arbeitet mit Arrays und 2 Schleifen, evtl. nicht sehr elegant, abgesehen von der Sortierrichtung, die ist bei mir von großen Zahlen zu kleine.

    Zu date in PHP:

    h= Stunde im 12-Stunden-Format, mit führenden Nullen 01 bis 12
    m= Monat als Zahl, mit führenden Nullen 01
    bis 12
    s= Sekunden, mit führenden Nullen 00 bis 59

    Du erkennst deinen Fehler?

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Hey,

    ok.

    ups, dachte das m minute ist. Jetzt zeigt es mir die richtige Uhrzeit an, Habe das m zu i geändert.

    PHP
    echo "Wir haben jetzt: ".date("H:i:s");
  • Mit sort() funktioniert's.

    4 Mal editiert, zuletzt von djheke (31. Juli 2016 um 19:59)

  • Hey,

    Danke. Es funktioniert.

    Beim sortieren der 6 Zahlen, hast du dafür ein array erstellt wo diese Zahlen beinhaltet. Danach wird dann dieser array sortiert. Und mittels foreach (für arrays) als zahl wieder ausgegeben. Ist das so richtig?

    Gruß,
    Stef

    • Offizieller Beitrag

    Hallo,

    Die Arrays würde ich auch über range() und shuffle() erstellen und verwürfeln.
    Allerdings macht das Sortieren des Arrays innerhalb der Schleife keinen Sinn. Das kann direkt nach der Schleife passieren.
    Und eine Schleife an sich benötigt man gar nicht, denn PHP bietet eine Vielfalt an Array-Funktionen, die das ganze Vorhaben komplett schleifenlos abbilden lassen:


    Für die Superzahl greift man hier eh auf das erste Element im Array zu.
    Dafür eine Schleife zu setzen, die von 0 anfängt zu zählen, solange der Wert <= 0 ist, macht hier nicht viel Sinn.

    Gruß Arne

    • Offizieller Beitrag

    Naja, falsch ist der andere Weg ja auch nicht. Sollte halt nur eine etwas kompaktere Möglichkeit darstellen.

    Richtig "cool" wird es aber erst, wenn man ein eigenes Objekt einführt.
    Das ist zwar nicht dringend notwendig und wird sicher von einigen als unnötig empfunden, aber mich nervt es bspw. dass Funktionen wie shuffle() und sort() nur auf Referenzen arbeiten und das Ergebnis der Verarbeitung nicht zurückliefern. Aufgrund dessen habe ich mal vor langer Zeit eine Array-Klasse geschrieben, in der ich die für mich wichtigsten Array-Funktionen gewrapped oder nachgebildet oder etwas erweitert habe.
    Ich habe mir mal den Spaß gemacht, die Lottozahlen damit darzustellen, weil ich selbst mal sehen wollte, wie kurz es wird:

    PHP
    $aLottozahlen = new __Array( range(1,49) );
    $aGezogen = $aLottozahlen->shuffle()->slice( 0, 6 )->fetch( SORT_REGULAR );
    
    
    echo implode( ' - ', $aGezogen );


    Hier wird erst über den Konstruktor das Array definiert mit den Zahlen von 1 bis 49, dann im zweiten Step vermischt, die ersten 6 Zahlen herausgezogen und das Ergebnis dann sortiert an $aGezogen übergeben.
    Funktionen und Klassen erleichtern die Arbeit eines Entwickler ungemein und wenn man diese erst mal beherrscht und sinnvoll einsetzt, ist das ein guter Einstieg, sich mit OOP zu beschäftigen.
    Da geht dann noch einiges mehr... ;)

    Gruß Arne

    • Offizieller Beitrag

    Hallo,

    Ich stell mal eine hier rein, die für das Lottoding ausreichen sollte:


    Interessant sind in Deinem Fall ja eigentlich nur die Methoden shuffle(), slice(), fetch() und sort().
    Das müsste dann eigentlich so funktionieren:

    PHP
    include_once 'ArrayWrapper.php';
    
    
    $aLottozahlen = new ArrayWrapper( range(1,49) );
    $aGezogen = $aLottozahlen->shuffle()->slice( 0, 6 )->fetch( SORT_REGULAR );
    
    
    echo implode( ' - ', $aGezogen );


    Habs jetzt aber nicht getestet, wen Fehler kommen musst Du die mal posten, ist sicher nur ne Kleinigkeit.

    Gruß Arne