2010-09-04 5 views
2

J'ai écrit un script PHP pour générer des valeurs aléatoires entre 1 et 99999999999999999999 (c'est 20 9).générateur de nombres aléatoires en php

Le script est comme ceci:

$maxq=20; 
for($i=1;$i<=$maxq;$i++) { 
    $min=pow(10,$i); 
    $max=(pow(10,$i)*10)-1; 
    echo $min."<br>"; 
    echo $max."<br>"; 
    echo mt_rand($min,$max)."<br>----<br>"; 
} 

mais après 10 chiffres, php génère des notations scientifiques comme 1.0E + 19 et les nombres aléatoires générés sont un gâchis.

Je pense que c'est à cause de mes imitations de matériel (OS: Win XP 32 bits).

Que puis-je faire pour survivre? de l'aide?

Merci.

Répondre

10

Vous pouvez générer n chiffres aléatoires et les concaténer en une seule grande chaîne.

function randomDigits($numDigits) { 
    if ($numDigits <= 0) { 
     return ''; 
    } 

    return mt_rand(0, 9) . randomDigits($numDigits - 1); 
} 

// Or an iterative approach 
function randomDigitsLame($numDigits) { 
    $digits = ''; 

    for ($i = 0; $i < $numDigits; ++$i) { 
     $digits .= mt_rand(0, 9); 
    } 

    return $digits; 
} 

$maxq = 20; 

for ($i = 1; $i <= $maxq; $i++) { 
    echo $i . "<br>\n"; 
    echo randomDigits($i) . "<br>\n----<br>\n"; 
} 
+0

exactement ce que je en train d'écrire :) Merci pour votre script Strager – jest

+0

Pourquoi appelez-vous le boiteux approche itérative? Sûrement dans cette situation, il vaut mieux que votre solution récursive, car vous n'avez pas à pousser et à faire apparaître des variables sur une pile, et vous ne faites pas inutilement de profondeur à votre pile (ce qui pourrait causer un StackOverflow). – bramp

+0

@bramp, Pssh. C'est boiteux. Passer à autre chose. =] – strager

8

Vous pouvez utiliser le BC Math Functions pour dépasser la limite. Ou si vous n'allez pas faire de calculs avec votre nombre aléatoire, vous pouvez créer une chaîne aléatoire de 20 chiffres. Quelque chose comme:

$num = ''; 
for ($i = 0; $i < 20; $i++) 
    $num .= mt_rand(0, 9); 
echo $num; 
0
  1. Dans la plate-forme Windows, il peut être utilisé getrandmax(), il ne donne que 32768.
  2. si vous avez besoin de plus grande plage 32768.
  3. spécification min et max
  4. Il vous permettra de créer une plus grande gamme de 32768
  5. il envisagera d'utiliser mt_rand() au lieu de getrandmax()

Par exemple,

<?php 
echo rand() . "\n"; 
echo rand() . "\n"; 

echo rand(5, 15); 
?> 
0

Je construis sur réponse "bramp". Je voulais 25 lignes, de 25 chiffres générés au hasard:

<?php 
    $num = ''; 
    while($i < 25) 
    { 
    for ($n = 0; $n < 25; $n++) 
     $num .= mt_rand(0, 9); 
     echo $num . "</br>"; 
    $num = ''; 
    $i++; 
    } 
?> 
Questions connexes