rand aber mit Wörtern
Simon
- php
0 Thomas0 Malcolm Beck´s0 ChrisB0 Gunnar Bittersmann
0 Der Martin
0 Malcolm Beck´s0 Tom
0 Simon
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
das geht mit einem Array:
$arr = array( "null", "eins", "zwei"....etc. );
$ergebnis = $arr[rand(1,10)];
VG
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
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
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
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
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
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 Ñ - ĜわたしÑ
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.
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
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
hi,
Ziel ist ja, dass nur Zufällige Buchstaben zurück gegeben werden, Gross oder klein; dein Beispiel gibt bei mir nur Ziffern aus.
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.
@@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'
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)
@@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'
@@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'
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
@@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'
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
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
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
das geht mit einem Array:
Perfekt danke.
lg Simon
@@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'