php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.06.2009, 23:40  
Benutzer
 
Registriert seit: 23.06.2009
Beiträge: 34
PHP-Kenntnisse:
Anfänger
JackD befindet sich auf einem aufstrebenden Ast
Standard Zufallszahlen mit mt_rand() aber keine doppelten zahlen wie stell ich das an?

Erstmal Hallo zusammen

Habe da ein kleines Problem, ich werde es mal ganz schlicht umschreiben den wen am ende das rauskommt was ich will kann ich ja die Zahlen Tauschen erweitern wie ich will

Ich hätte gerne 4 zufallsgenerierte Zahlen (einfachheitshalber) zwischen 1 und 5
der Hacken an der Sache was ich nicht hinkrieg es darf keine Zahl doppelt kommen

meine versuche sahen ungefähr so aus:

$zahl1 = mt_rand(1,5);
$zahl2 = mt_rand(1,5);
$zahl3 = mt_rand(1,5);
$zahl4 = mt_rand(1,5);

soweit so gut mit echo könnte man nun die 4 zahlen ausgeben aber dan kommt immer mal wieder eine doppelt

Ich habe das dan mit
if ($zahl1 != $zahl2); etc versucht aber kam auf keinen brauchbaren grünen zweig

Hättet Ihr da eine Lösung für mich das wäre Wunderbar

Besten Dank
JackD
JackD ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.06.2009, 23:48  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.003
drsoong befindet sich auf einem aufstrebenden Ast
Standard

Sind das wirklich 4 Zahlen zwischen 1 und 5.

Zieh Dir mal das Thema "array" bei php.net rein. Da steht alles, was Du wissen must.
drsoong ist offline  
Alt 24.06.2009, 00:06  
Benutzer
 
Registriert seit: 23.06.2009
Beiträge: 34
PHP-Kenntnisse:
Anfänger
JackD befindet sich auf einem aufstrebenden Ast
Standard

Ich weiss eben nicht vieleicht wäre es eine bessere lösung mit einem array das zu machen, darum dachte ich eigentlich das ich hier mal nachfrage den ein PHP Profi hatt da sicher sofort ne idee auf lager.

nein es könnte auch
$zahl1 = mt_rand(1,1000);
heissen nur mit 1-5 sieht man dan schnell ob es funktioniert das niemals eine zahl doppelt kommt

Werde mich definitiv noch mehr in arrays und PHP allgemein einlesen
aber falls jemand ne idee hatt wäre ich trotzdem froh
JackD ist offline  
Alt 24.06.2009, 00:25  
Erfahrener Benutzer
 
Registriert seit: 03.06.2009
Beiträge: 140
PHP-Kenntnisse:
Anfänger
thomasE befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
$zahlen = array();
for(
$i 0$i<4$i++){
    do {
        
$rand mt_rand(1,1000);
    } while(
in_array($rand$zahlen));
    
    
$zahlen[$i] = $rand;

thomasE ist offline  
Alt 24.06.2009, 00:32  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.069
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

PHP-Code:
<?php
do {
    
$rand[] = mt_rand(1,1000);
} while(
count($rand array_unique($rand)) < 4);
?>
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline  
Alt 24.06.2009, 00:33  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Halte ich für keine gute Lösung. Für kleine Zufallsbereiche kann das ein echter Flaschenhals werden. Was besseres ausser ein allumfassendes Array aufzuspannen fällt mir aber auch nicht ein.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 24.06.2009, 00:38  
Benutzer
 
Registriert seit: 16.06.2009
Beiträge: 91
PHP-Kenntnisse:
Fortgeschritten
Raymond befindet sich auf einem aufstrebenden Ast
Standard

Kommt mir irgendwie sehr bekannt vor... vor ein paar Tagen war da schonmal sowas innerhalb eines Skripts aufgetaucht. Ich kann mich deswegen daran erinnern, weil ich auf den ersten Blick die Lösung dieses Problems nicht als Zweck des "Mißbrauchs" der Schleife erkannt hatte und mich fragte, was das denn wohl solle.

Derjenige hat eine while-Schleife dazu "mißbraucht", was ich als Idee gar nicht schlecht fand, aber die Ausführung hätte ich dann doch etwas anders umgesetzt..

PHP-Code:
while (count($zahlen<4)){
    
$zahl=rand(1,5);
    
$zahlen=array_unique(array_push($zahlen,$zahl));

oder eben ganz kompakt ^^
PHP-Code:
while (count($zahlen<4)){
        
$zahlen=array_unique(array_push($zahlen,rand(1,5)));


Geändert von Raymond (24.06.2009 um 00:53 Uhr). Grund: nur so ^^
Raymond ist offline  
Alt 24.06.2009, 01:12  
Erfahrener Benutzer
 
Registriert seit: 03.06.2009
Beiträge: 140
PHP-Kenntnisse:
Anfänger
thomasE befindet sich auf einem aufstrebenden Ast
Standard

@Raymond
dann aber
PHP-Code:
while (count($zahlen) < 4){ ... } 


Zitat:
Zitat von nikosch Beitrag anzeigen
Halte ich für keine gute Lösung. Für kleine Zufallsbereiche kann das ein echter Flaschenhals werden. Was besseres ausser ein allumfassendes Array aufzuspannen fällt mir aber auch nicht ein.
wen meinst du, mich oder Chriz?

@Chriz
Kompliment, ist eleganter.
thomasE ist offline  
Alt 24.06.2009, 01:38  
Benutzer
 
Registriert seit: 16.06.2009
Beiträge: 91
PHP-Kenntnisse:
Fortgeschritten
Raymond befindet sich auf einem aufstrebenden Ast
Standard

lol.. stimmt.. kommt davon, wenn man gleichzeitig rumspinnt, nebenher projekte plant und einem dabei Katzenbabys über die Tastatur springen ^^
Da kann man um diese Zeit dann doch nicht für Fehlerlosigkeit garantieren
Raymond ist offline  
Alt 24.06.2009, 02:46  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

@thomasE: Euch beide.

Für kleine Zahlenbereiche:
PHP-Code:
<?php
$iStartvalue 
0;
$iEndvalue 1000;
$iNumber 4;

$aGenerated range ($iStartvalue $iEndvalue);
shuffle ($aGenerated);

$aRandom array_slice ($aGenerated 0$iNumber);
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (24.06.2009 um 02:54 Uhr).
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mt_rand, php mt_rand, keine doppelten zufallszahlen, javascript zufallszahlen keine doppelten zahlen, http://www.php.de/php-einsteiger/56381-zufallszahlen-mit-mt_rand-aber-keine-doppelten-zahlen-wie-stell-ich-das.html, zufallszahlen keine doppelten, zufallszahl javascript keine zahl doppelt, java doppelte zahlen, java keine doppelten zahlen, mt_rand javascript, php zufallszahl mt_rand, mt_rand doppelt, php zufallszahl 1-5, javascript zufallszahl nicht doppelt, java zufallszahl keine doppelten, rand keine doppelten zahlen, keine doppelten zufallszahlen java, javascript mt_rand, php rand keine doppelten, php zufallszahlen ohne doppelte

Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum