[Tutorial]Kleine Dynamische Foren Signatur - Random-Text

[quote=“rolandhorras”]Ich hab’s so gelöst:

[code] function StringToUnicode ($str)
{
$len = strlen ( $str );
$newstr = ‘’;
for ($i = 0; $i < $len; $i++) {
if (ord($str[$i]) >= 160)
$newstr = $newstr.’&#’.ord($str[$i]).’;’;
else
$newstr = $newstr.$str[$i];
}
return ($newstr);
}

imagettftext ($image, $TextSize, 0, 20, 60, $TextColor, $font, StringToUnicode (“Mein Bärenstarkes Tästing”));[/code]

Dann klappt’s auch mit imagettftext()…[/quote]
ja, aber nicht mit utf-8 :wink:
Dein Code ersetzt Byte für Byte in numerische Entities…

Das klappt aber nicht bei utf-8, da utf-8 auch gelegentlich aus mehreren Bytes besteht.
Ein kleines “ä” welches UTF-8 kodiert ist, würde auf deiner Grafik “ä” erzeugen, weil es aus den Bytes 195 und 164 besteht…
deine Funktion wandelt ein “ä” also in “ä” um.

Hallo Gemeinde ,ich würde das ganze mit Zahlen von 1 - 45 verwenden wollen,dazu habe ich den php Code entsprechend angepasst :

[code]<?php

$zahl_zufall[1]=‘1’;
$zahl_zufall[2]=‘2’;
$zahl_zufall[3]=‘3’;
$zahl_zufall[4]=‘4’;
$zahl_zufall[5]=‘5’;
$zahl_zufall[6]=‘6’;
$zahl_zufall[7]=‘7’;
$zahl_zufall[8]=‘8’;
$zahl_zufall[9]=‘9’;
$zahl_zufall[10]=‘10’;
$zahl_zufall[11]=‘11’;
$zahl_zufall[12]=‘12’;
$zahl_zufall[13]=‘13’;
$zahl_zufall[14]=‘14’;
$zahl_zufall[15]=‘15’;
$zahl_zufall[16]=‘16’;
$zahl_zufall[17]=‘17’;
$zahl_zufall[18]=‘18’;
$zahl_zufall[19]=‘19’;
$zahl_zufall[20]=‘20’;
$zahl_zufall[21]=‘21’;
$zahl_zufall[22]=‘22’;
$zahl_zufall[23]=‘23’;
$zahl_zufall[24]=‘24’;
$zahl_zufall[25]=‘25’;
$zahl_zufall[26]=‘26’;
$zahl_zufall[27]=‘27’;
$zahl_zufall[28]=‘28’;
$zahl_zufall[29]=‘29’;
$zahl_zufall[30]=‘30’;
$zahl_zufall[31]=‘31’;
$zahl_zufall[32]=‘32’;
$zahl_zufall[33]=‘33’;
$zahl_zufall[34]=‘34’;
$zahl_zufall[35]=‘35’;
$zahl_zufall[36]=‘36’;
$zahl_zufall[37]=‘37’;
$zahl_zufall[38]=‘38’;
$zahl_zufall[39]=‘39’;
$zahl_zufall[40]=‘40’;
$zahl_zufall[41]=‘41’;
$zahl_zufall[42]=‘42’;
$zahl_zufall[43]=‘43’;
$zahl_zufall[44]=‘44’;
$zahl_zufall[45]=‘45’;
$zufall_key = rand(1,45);

header(“Content-type: image/png”);
$img = imagecreatefrompng(“tidus.png”);
$bblue = imagecolorallocate($img,51,204,255);
imagettftext($img, 14, 0, 155, 37, $bblue, “FortuneCity.ttf”,"$zahl_zufall[$zufall_key]");
imagepng($img);

?>[/code]

Das funzt auch soweit nur frage ich mich bzw. euch was muss ich wie ändern ,damit direkt mehrere (z.b. 9) zufällige Zahlen ausgegeben werden ? Vielen Dank an euch ,lg Tidus

Hi,

Du kannst anstelle der obenstehenden Einzelauflistung auch einfach nur $zufall_key = rand(1,45); verwenden, da es sich hier ja schon um die Ermittlung einer Zufallszahl handelt.

Soll jede Zahl nur einmal gezogen werden oder kann eine Zahl auch doppelt vorkommen?

Hallo kerbination ,

die Zahlen können auch doppelt vorkommen ,wichtig ist halt nur das es zufällig ist.

Edit : Sorry habe mich vertan die Zahlen sollen nur einmal ausgegeben werden.

Ich würd das in einem Array mit For-Schleife lösen…

$array = array(); for($i=0;$i<9;$i++){ $zahl = rand(1, 45); while(in_array($zahl,$array)){ $zahl = rand(1, 45); } $array[] = $zahl; }

So in etwa…

So ähnlich hatte ich das auch schon :

[quote]<?php
function generate_numbers( $min, $max, $anz )
{
$array = range( $min, $max );
srand( (double)microtime() * 1000000 );
for ( $x=0; $x<$anz; $x++ ) {
$i = rand( 1, count( $array) ) - 1;
$erg[] = $array[$i];
array_splice( $array, $i, 1 );
}
return $erg;
}

// 6 Zahlen im Bereich von 1 bis 45 ermitteln
$zufalls_array = generate_numbers( 1, 45, 6 );
echo join( '; ', $zufalls_array );

?>[/quote]

Nur weiss ich nicht wie ich ein Background einfügen soll und wie ich die Zahlen positionieren soll

Was ergibt denn deine echo-Ausgabe anch dem Parsen?

Ich habe es nun so gelöst ,ist zwar nicht die beste Lösung aber erfüllt seinen zweck :smiley:

[quote]$zufall_key_1 = rand(1, 7);
$zufall_key_2 = rand(8, 15);
$zufall_key_3 = rand(16, 23);
$zufall_key_4 = rand(24, 31);
$zufall_key_5 = rand(32, 39);
$zufall_key_6 = rand(40, 45);
$zufall_key_7 = rand(1, 45);

header(“Content-type: image/png”);
$img = imagecreatefrompng(“xxx.png”);
$bwhite = imagecolorallocate($img,255,255,255);
imagettftext($img, 18, 0, 85, 43, $bwhite, “FortuneCity.ttf”,"$zahl_zufall[$zufall_key_1] $zufall_key_2 $zufall_key_3 $zufall_key_4 $zufall_key_5 $zufall_key_6 [ $zufall_key_7 ]");
imagepng($img);[/quote]

[quote=“Tidus”]Ich habe es nun so gelöst ,ist zwar nicht die beste Lösung aber erfüllt seinen zweck :smiley:

[quote]$zufall_key_1 = rand(1, 7);
$zufall_key_2 = rand(8, 15);
$zufall_key_3 = rand(16, 23);
$zufall_key_4 = rand(24, 31);
$zufall_key_5 = rand(32, 39);
$zufall_key_6 = rand(40, 45);
$zufall_key_7 = rand(1, 45);[/quote][/quote]
Das ist ja nun kein “echter” Zufall, sondern es sind schon Intervalle vorgegeben, aus denen jeweils eine Zahl gezogen wird. Wenn man das möchte, OK - aber “echter” Zufall ginge auch einfacher:

$zahlen = range(1, 45); // Array erzeugen, das die Zahlen 1 - 45 enthält shuffle($zahlen); // Array zufällig durchmischen
Dann braucht man aus diesem Array nur noch die ersten sieben Einträge nehmen (per for-Schleife, oder einzeln direkt ansprechen), und fertig.

das Problem ist wenn ich die Intervalle nicht vorgebe dann werden Zahlen auch doppelt ausgegeben und das soll nicht sein.Es soll einfach immer 7 verschiedene Zahlen ausgegeben werden und nie eine doppelt.

Und genau das hast du, wenn du meine Lösung umsetzt.

könntest du mir vileicht den kompletten php code posten ?

Der ist schon so gut wie fertig.
Du brauchst nur noch das, was in normalsprachlicher Beschreibung in einem Satz darunter steht, in Code umsetzen, und das ist alles.

Manchmal ist auch ein bisschen Googlen ganz Hilfreich, ihr seid doch schließlich nicht die ersten, die meherer Zufallszahlen wollen, aber keine doppelt vorkommen soll :wink:

antusblog.de/2009/04/04/zufa … n-mit-php/

Entsprechender Codeausschnitt:

[code]function zufallszahlen($von, $bis, $anzahl) {
$zahlen = range($von, $bis);
for ($i = 0; $i < $anzahl; $i++) {
$a = rand(0, count($zahlen) - 1);
$ergebnis[] = $zahlen[$a];
array_splice($zahlen, $a, 1);
}

return $ergebnis;

}[/code]

Das geht viel kürzer

function zufallszahlen($von, $bis, $anzahl)
{
  $zahlen = range($von, $bis);
  shuffle($zahlen);
  return array_slice(0, $anzahl);
}

range() erstellt eine Array in der Form (1,2,3,4,5,…,$bis)
shuffle() mischt das array
array_slice() extrahiert einen Teil des Arrays

Ich verstehe nur Bahnhof :hail: sorry ,ist es denn nicht möglich mal einen fertigen Code zu posten mit 7 unterschiedlichen Zahlen ? Ausserdem soll ja auch das HG Bild mit eingebunden werden.Bei den ganzen geposteten Codes bekomme ich nur fehlermeldungen.

Wie wär’s, wenn du selber auch ein bisschen was machst, und nicht nur nach fertigem Code schreist?

“Funzt nich” ist keine brauchbare Problembeschreibungen.

Wenn du Hilfe beim beseitigen eines Fehlers bekommen willst, dann nenne den exakten Code, den du verwendet hast, und die exakte Fehlermeldung.

<?php

function zufallszahlen($von, $bis, $anzahl)
{
  $zahlen = range($von, $bis);
  shuffle($zahlen);
  return array_slice($zahlen, 0, $anzahl);
}

$zahlen = zufallszahlen(1, 45, 7);

echo implode(" - ", $zahlen);

michi7x7.homelinux.net/test.php

[quote=“michi7x7”][code]

<?php function zufallszahlen($von, $bis, $anzahl) { $zahlen = range($von, $bis); shuffle($zahlen); return array_slice($zahlen, 0, $anzahl); } $zahlen = zufallszahlen(1, 45, 7); echo implode(" - ", $zahlen); [/code][/quote] Hallo michi7x7 ,so funktioniert das zwar und so bekomme ich das auch mit meinem gepostetem Code auf seite 3 hin ,nur finde ich das nicht sehr schön anzuschauen.Ich würde gern die Zufallszahlen wie auf dem screen darstellen. [img]http://freemcboot.bplaced.net/lotto/screen.jpg[/img]

dafür gibts ja die gd-Funktionen

php.net/gd

Der Grundaufbau ist ganz einfach: Du erstellst ein GD-Objekt von dem Hintergrundbild und zeichnest dann mit imagetext mit einer vorgegebenen Schriftdate (TTF) auf das Bild