2016-07-01 12 views
2

Was ist der beste Weg, um eine zufällige Ganzzahl mit einer eingeschränkten Menge von Ziffern zu generieren?Generieren von zufälligen Werten mit eingeschränkten Ziffern

Ich möchte eine vierstellige Zufallszahl generieren, wobei jede Ziffer im Bereich [1..6] liegt. Ich dachte, eine Zahl im Bereich [0..1295] zu erzeugen, dann in die Basis 6 umzuwandeln und die Ziffern zu erhöhen, aber das geht durch eine Zeichenkette.

Antwort

2

Ohne String-Konvertierung, und mit nur einem Aufruf an einen Zufallsgenerator können Sie dies tun:

function myRandom() { 
    $num = mt_rand(0, 1295); 
    $result = 0; 
    for ($i = 0; $i < 4; $i++) { 
     $result = $result*10 + $num % 6; 
     $num = floor($num/6); 
    } 
    return $result + 1111; 
} 
1

Sie könnten jede Ziffer einzeln wie folgt erzeugen:

$result = ''; 
for ($i=0; $i < 4; $i++) { 
    $result .= mt_rand(1, 6); 
} 
$result = (int) $result; 

Oder wenn eine Zeichenfolge mit nicht bevorzugt ist, können Sie es mit Mathematik tun könnte:

$result = 0; 
for ($i=0; $i < 4; $i++) { 
    $result += mt_rand(1, 6) * 10 ** $i; 

    // or for PHP versions < 5.6 (no ** exponentiation operator) 
    // $result += mt_rand(1, 6) * pow(10, $i); 
} 
0
<?php 
// 216_10 = 1000_6 
// 1295_10 = 5555_6 
base_convert(mt_rand(216,1295),10,6); 
+0

Einige Ziffern liegen nicht im Bereich [1..6]. (Sorry, ich versuche nicht, dich zu erwischen.) –

+0

yep .. Ich sehe .. Ich habe einige Bedingungen in der Frage verpasst ... deine Antwort scheint genauer ... aber nicht universal (obwohl OP nicht darüber spricht) .. Ich meine, wir können jeden Satz von Zeichen nicht nur Ziffern verwenden .. sry für Off-Topic) – Wizard

Verwandte Themen