Simon: rand aber mit Wörtern

Hi,
gibt es vielleicht die Möglichkeit diese Funktion so umzuändern dass sie nicht eine Zufalls Zahl zwischen 1 und 10 ausgibt sondern ein Zufallswort aber als "eins", "zwei" usw.

function numbers()  
{  
  $number[0] = rand(1,10);  
}

Danke
lg simon

  1. das geht mit einem Array:

    $arr = array( "null", "eins", "zwei"....etc. );

    $ergebnis = $arr[rand(1,10)];

    VG

    Thomas
    http://www.dateien-synchronisieren.de

    1. hi,

      das geht mit einem Array:

      $arr = array( "null", "eins", "zwei"....etc. );

      $ergebnis = $arr[rand(1,10)];

      Warum so umständlich?

      echo [link:http://us2.php.net/manual/en/function.chr.php@title=chr]([link:http://php.net/manual/de/function.mt-rand.php@title=mt_rand]([link:http://www.asciitable.com/@title=97, 122]));

      mfg

      --
      マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
      1. Hi,

        $arr = array( "null", "eins", "zwei"....etc. );

        $ergebnis = $arr[rand(1,10)];

        Warum so umständlich?

        echo [link:http://us2.php.net/manual/en/function.chr.php@title=chr]([link:http://php.net/manual/de/function.mt-rand.php@title=mt_rand]([link:http://www.asciitable.com/@title=97, 122]));

        Der Frager wollte das ausgeschriebene Zahlwort haben, und keinen zufälligen Buchstaben.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Hello,

          Der Frager wollte das ausgeschriebene Zahlwort haben, und keinen zufälligen Buchstaben.

          Dann sei er noch darauf hingewiesen, dass array_rand() in den auf Xampp (Win XP 32) getesteten Fällen lange nicht so "zufällig" war, wie mt_rand().

          In dem Test ging es zwar gerade um das Zusammenwürfeln einer Zeichenkette, aber sicherlich kann man das auch zurückübertragen.

          Array_rand hatte bei 10.000 Versuchen mehrfach (!) nur 576 unterschiedliche Ergebnisse ausgewürfelt, während mt_rand() bei 10.000 Versuchen auch mehrfach hintereinander keine Doubletten erzeugt hat.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. hi,

            mich hat gerade die Neugier gepackt bezüglich zufälliger Buchstaben -- mein Beispiel ist ja Ok, nur liefert es entweder kleine Buchstaben - "97, 122" oder Grossbuchstaben - "65, 90".

            Die Ascii-Tabelle hat ja dummerweise noch andere Zeichen zwischen Klein und Großbuchstaben, also habe ich mir eine Funktion geschrieben.

             error_reporting(E_ALL | E_STRICT); // nur um Sicher zu gehen  
              
             function randomize()  
             {  
               $_array[] = array(65, 90);  // [0][0] = 65 -- [0][1] = 90  
               $_array[] = array(97, 122); // [1][0] = 97 -- [1][1] = 122  
               $_randArray = mt_rand(0,1); // Eine Zufallszahl zwischen 0 und 1, um zwischen den Arrays zu switchen  
               return chr(mt_rand( $_array[$_randArray][0], $_array[$_randArray][1] ));  
             }  
              
             for($i = 1; $i < 40; $i++)  
             {  
               printf("%s ", randomize());  
             }
            

            Funktioniert auch Einwandfrei, nur frage ich mich gerade, ob PHP nicht Evtl. schon eine Integrierte Funktion für so ein anliegen hat. Hat es?

            mfg

            --
            マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
            1. Hallo,

              Die Ascii-Tabelle hat ja dummerweise noch andere Zeichen zwischen Klein und Großbuchstaben, also habe ich mir eine Funktion geschrieben.

              kommt mir recht umständlich vor, erst mit einem Zufallswert das gewünschte Array auszuwählen, und mit einem zweiten Zufallswert einen zugehörigen Index. Ich ziehe die Lösung mit nur *einem* Array als Zeichenvorrat vor.

              $pool = array_merge  
                (range(0x41,0x5A),                        // Großbuchstaben  
                 range(0x61,0x7A),                        // Kleinbuchstaben  
                 range(0x30,0x39));                       // Ziffern  
              $rn   = mt_rand(0, count($pool)-1);         // zufälligen Index ermitteln  
              $char = $pool[$rn];                         // Zeichen aus Gesamt-Array
              

              Man muss beachten, dass mt_rand($a,$b) im Gegensatz zu anderen, ähnlichen Implementierungen eine Zufallszahl zwischen $a und $b liefert, und zwar je *einschließlich der Grenzen. Für gewöhnlich liefern solche Funktionen ein Ergebnis $x mit $a ≤ $x < $b, also *ausschließlich* der Obergrenze.

              Funktioniert auch Einwandfrei, nur frage ich mich gerade, ob PHP nicht Evtl. schon eine Integrierte Funktion für so ein anliegen hat. Hat es?

              Weiß ich nicht. PHP hat sooo viele vordefinierte Funktionen, dass es mich nicht wundern würde.

              So long,
               Martin

              --
              Zwischen Leber und Milz
              passt immer noch'n Pils.
              1. hi,

                $pool = array_merge

                (range(0x41,0x5A),                        // Großbuchstaben
                   range(0x61,0x7A),                        // Kleinbuchstaben
                   range(0x30,0x39));                       // Ziffern
                $rn   = mt_rand(0, count($pool)-1);         // zufälligen Index ermitteln
                $char = $pool[$rn];                         // Zeichen aus Gesamt-Array

                  
                Ziel ist ja, dass nur Zufällige Buchstaben zurück gegeben werden, Gross oder klein; dein Beispiel gibt bei mir nur Ziffern aus.  
                  
                mfg
                
                -- 
                マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
                
                1. Hi,

                  $pool = array_merge

                  (range(0x41,0x5A),                        // Großbuchstaben
                     range(0x61,0x7A),                        // Kleinbuchstaben
                     range(0x30,0x39));                       // Ziffern
                  $rn   = mt_rand(0, count($pool)-1);         // zufälligen Index ermitteln
                  $char = $pool[$rn];                         // Zeichen aus Gesamt-Array

                  
                  >   
                  > Ziel ist ja, dass nur Zufällige Buchstaben zurück gegeben werden, Gross oder klein; dein Beispiel gibt bei mir nur Ziffern aus.  
                    
                  Du musst noch chr() auf $char anwenden, wenn du das zugehörige Zeichen erhalten willst.  
                    
                  MfG ChrisB  
                    
                  
                  -- 
                  Light travels faster than sound - that's why most people appear bright until you hear them speak.
                  
                  1. hi,

                    Du musst noch chr() auf $char anwenden, wenn du das zugehörige Zeichen erhalten willst.

                    Der Groschen ist spät gefallen -- aber immerhin, er ist gefallen ;)

                    Danke.

                    mfg

                    --
                    マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
                    1. Hello,

                      Du musst noch chr() auf $char anwenden, wenn du das zugehörige Zeichen erhalten willst.

                      Der Groschen ist spät gefallen -- aber immerhin, er ist gefallen ;)

                      Kannst Du noch umtauschen bei jeder Landeszentralbank, wenn Du willst.

                      Liebe Grüße aus dem schönen Oberharz

                      Tom vom Berg

                      --
                      Nur selber lernen macht schlau
                      http://bergpost.annerschbarrich.de
                2. hi,

                  Ziel ist ja, dass nur Zufällige Buchstaben zurück gegeben werden, Gross oder klein; dein Beispiel gibt bei mir nur Ziffern aus.

                  Keine Ausreden  ;)

                  Gute Nacht!

                  mfg
                  P.s.: echo chr($char); -- ist doch klar, dass echo $char; nur Ziffern zurück gibt

                  Danke für das Bsp., ist definitiv Effektiver als meine Funktion.

                  --
                  マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
              2. @@Der Martin:

                nuqneH

                kommt mir recht umständlich vor, erst mit einem Zufallswert das gewünschte Array auszuwählen, und mit einem zweiten Zufallswert einen zugehörigen Index.

                ACK.

                Ich ziehe die Lösung mit nur *einem* Array als Zeichenvorrat vor.

                Ich ziehe die Lösung *ohne* Array vor:

                $rn = mt_rand(0, 51);  
                $rn += ($rn < 26 ? 65 : 97);  
                $char = chr($rn);
                

                Qapla'

                --
                Bildung lässt sich nicht downloaden. (Günther Jauch)
                1. Hallo Gunnar,

                  Ich ziehe die Lösung mit nur *einem* Array als Zeichenvorrat vor.
                  Ich ziehe die Lösung *ohne* Array vor:

                  tatsächlich?

                  $rn = mt_rand(0, 51);

                  $rn += ($rn < 26 ? 65 : 97);
                  $char = chr($rn);

                    
                  Sehr schön. Das wird aber umso komplizierter, je mehr Teilbereiche man einbeziehen möchte. Ansonsten finde ich deine Lösung ebensogut.  
                    
                  So long,  
                   Martin  
                  
                  -- 
                  [Funktion und Referenz](http://community.de.selfhtml.org/zitatesammlung/zitat114) auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.  
                    (Ashura)
                  
                  1. @@Der Martin:

                    nuqneH

                    Sehr schön.

                    Nicht wahr? Aber nicht richtig. Von 97 müssen 26 abgezogen werden:

                    $rn = mt_rand(0, 51);  
                    $rn += ($rn < 26 ? 65 : 81);  
                    $char = chr($rn);
                    

                    Das wird aber umso komplizierter, je mehr Teilbereiche man einbeziehen möchte.

                    Zweifelsohne. Die Lösung war für diesen speziellen Fall ge(d|m)acht.

                    Qapla'

                    --
                    Bildung lässt sich nicht downloaden. (Günther Jauch)
                    1. @@Gunnar Bittersmann:

                      nuqneH

                      Von 97 müssen 26 abgezogen werden:

                      Und wieviel ist 97 - 26? 81, würde ich als Kellner sagen.

                      $rn = mt_rand(0, 51);  
                      $rn += ($rn < 26 ? 65 : 71);  
                      $char = chr($rn);
                      

                      Ha’m wa’s jetz’?

                      Qapla'

                      --
                      Bildung lässt sich nicht downloaden. (Günther Jauch)
            2. Hello,

              mich hat gerade die Neugier gepackt bezüglich zufälliger Buchstaben -- mein Beispiel ist ja Ok, nur liefert es entweder kleine Buchstaben - "97, 122" oder Grossbuchstaben - "65, 90".

              mussu mal im Archiv suchen. Da gibbet einen Faden, aufgemacht von Kalle, ausprobiert von globe und mir zu diesem Thema

              http://forum.de.selfhtml.org/archiv/2009/6/t187722/#m1248234

              Die Lösung als Klasse fand ich ganz pfiffig, bin aber bis jetzt noch nicht zu den Frage dazu gekommen. z.B. warum einige Methoden public sidn, obwohl sie doch eigentlich gekapselt sein sollten...

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
      2. @@Malcolm Beck´s:

        nuqneH

        $arr = array( "null", "eins", "zwei"....etc. );
        $ergebnis = $arr[rand(1,10)];

        Warum so umständlich?

        Weil das die Aufgabenstellung erfüllt.

        echo chr(mt_rand(97, 122));

        Das hingegen nicht.

        Qapla'

        --
        Bildung lässt sich nicht downloaden. (Günther Jauch)
      3. Hallo,

        echo [link:http://us2.php.net/manual/en/function.chr.php@title=chr]([link:http://php.net/manual/de/function.mt-rand.php@title=mt_rand]([link:http://www.asciitable.com/@title=97, 122]));

        gute Antwort - nur leider zur falschen Frage. ;-)

        Grüße nach Herne,
         Martin

        --
        Success should be measured not so much by the position that one has reached in life,
        but by the obstacles one has overcome while trying to succeed.
        1. hi,

          gute Antwort - nur leider zur falschen Frage. ;-)

          Leider ;)

          Ich sollte mich wohl besser mal schlafen legen -- hab mich gerade dabei erwischt, wie ich mein Posting hier mit Strg+s speichern wollte.

          mfg

          --
          マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
          1. Hello,

            Ich sollte mich wohl besser mal schlafen legen -- hab mich gerade dabei erwischt, wie ich mein Posting hier mit Strg+s speichern wollte.

            Keine Ausreden bitte

            (-:

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
    2. das geht mit einem Array:

      Perfekt danke.
      lg Simon

      1. @@Simon:

        nuqneH

        das geht mit einem Array:

        Perfekt danke.

        Die von Malcolm Beck´s ins Spiel gebrachte Funktion mt_rand() solltest du dir dennoch ansehen.

        Qapla'

        --
        Bildung lässt sich nicht downloaden. (Günther Jauch)