[Javascript/PHP] Simple Zeichenfolge zufällig erzeugen per Script?

bitfunker

ewohner
Registriert
Okt. 2001
Beiträge
18.283
Hi, folks!

Mal (wieder ;)) was ganz besonders dämliches meinerseits. Ich habe mir angewöhnt, die Korrespodenz des E-Zines, an dem ich beteiligt bin, immer mit sowas wie hier abzuschließen:
_-_---__--__-____--_
--___-___------____
usw.
Ich wechsle also ca. 25 Zeichen lang Tief- und Bindestrich ab. Die Hackerei mache ich bisher immer blind auf der Tastatur, damit ich immer ein neues Muste bekomme.
Ist aber auf dauer etwas nevfig, daher die Frage:

Kann ich mir solche Zeilen per "Zufallsgenerator" erstellen lassen? Und vor allen: Wie?
 
Re: Simple Zeichenfolge zufällig erzeugen per Script?

Ich hab das Ganze mal eben mit JavaScript gelöst:
HTML:
<html><head></head><body>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
suchin = new Array("_", "-");
for(var i=0; i<25; i++)
  document.write(suchin[Math.round(Math.random())]);
//-->
</SCRIPT>
</body></html>
Noch eine kleine Erklärung dazu:
Math.random() gibt eine Zufallszahl zwischen 0 und 1 aus.
Math.round() rundet diese Zahl kaufmännisch auf- oder ab.
=> das Ergebnis ist also 0 oder 1.
 
Zuletzt bearbeitet:
Re: Simple Zeichenfolge zufällig erzeugen per Script?

Hier mit PHP

PHP:
<?php
$char=Array("_","-");
srand((double)microtime()*1000000);
for($i=1;$i<=25;$i++){
	echo $char[rand(0,1)];
}
?>
 
Zuletzt bearbeitet:
Re: Simple Zeichenfolge zufällig erzeugen per Script?

:daumen:
Genau sowas wollte ich!
:daumen:
*karmaausschütt*
 
Re: Simple Zeichenfolge zufällig erzeugen per Script?

migl schrieb:
Hier mit PHP

PHP:
<?php
$char=Array("_","-");
srand((double)microtime()*1000000);
for($i=1;$i<=25;$i++){
	echo $char[rand(0,1)];
}
?>
Seit PHP 4.2 muss man den Zufallszahlengenerator nicht mehr manuell starten. Deshalb kannst du die Zeile mit dem srand(); rausnehmen.
 
Re: Simple Zeichenfolge zufällig erzeugen per Script?

migl schrieb:
PHP:
<?php
$char=Array("_","-");
srand((double)microtime()*1000000);
for($i=1;$i<=25;$i++){
	echo $char[rand(0,1)];
}
?>
Wie umständlich...

PHP:
<?php for ($txt='';strlen($txt)<25;$txt.=chr(45+rand(0,1)*50)); echo $txt; ?>
 
uuuh... 25 mal strlen aufrufen ist aber auch nicht die feine englische...
zumindest mal nicht auf dauer. Hier isses recht egal weils trotzdem blitzschnell geht.
 
[UPS]Erazor schrieb:
zumindest mal nicht auf dauer.
Eben ;)
Aber bei 25 Iterationen ist der Unterschied zwischen dem Deklarieren und ständigen Inkrementieren einer Zählvariable gegenüber des ständigen Längenchecks vom String (das .= zählt nicht, da es auch bei einem Integer-Zähler gemacht werden müsste) vernachlässigbar. :)


Aber man kann es natürlich uach auf Geschwindigkeit optimieren:
PHP:
<?php
$txt = chr(45+rand(0,1)*50).
  chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).
  chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).
  chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).
  chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).
  chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).
  chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).
  chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).
  chr(45+rand(0,1)*50).chr(45+rand(0,1)*50).chr(45+rand(0,1)*50);
Nicht sonderlich elegant irgendwie... :)

Auch
PHP:
<?php
$txt = (rand(0,1)?'-':'_').
  (rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').
  (rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').
  (rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').
  (rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').
  (rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').
  (rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_').(rand(0,1)?'-':'_');
nutzt da nichts...

Eine recht elegante Lösung wäre hingegen:
PHP:
<?php
$txt = str_pad(strtr(decbin(mt_rand(0,(1<<25)-1)),'01','-_'),25,'-',STR_PAD_LEFT);
 
Zuletzt bearbeitet: (decbin() vergessen...)
[UPS]Erazor schrieb:
uuuh... 25 mal strlen aufrufen ist aber auch nicht die feine englische...
zumindest mal nicht auf dauer.
Funktions-Aufrufe sind in PHP zwar relativ teuer, aber strlen() ist wohl eine der preiswertesten Funktionen überhaupt, weil PHP von jedem String stets die Länge weiß, also nur einen schon im Speicher bekannten Wert zurückgeben muss. :)
 
Zurück
Oben