2

(Webページ上の)コンテンツのブロックに、今日の日付(それが何であれ)と固定番号の間に基づいてランダムに生成された番号を割り当てようとしています。何らかの理由で、出力される数値の種類に劇的な違いがあります。たとえば、コードをローカルでテストする場合、生成される数値は(正の数で)十分ですが、実際のライブサーバーでは、通常は反対であり、負の数です。

これは私のワンライナーです:

<?php $today=date('YmdHi'); echo rand(201203140906, $today); ?>

基本的に「201203140906」は年、月、日、時です。

これは良いですか悪いですか?これを行うためのより良い方法はありますか?

4

3 に答える 3

3

32ビットシステムでは、INTに保持できる最大値は2147483647です。

http://php.net/manual/en/language.types.integer.php

ローカルマシンが64ビットで、サーバーが32ビットの場合、サイズ制限は異なります。サーバーは、201203140906までの整数を処理できなくなります。

ランダムに小さい数を生成して、それを201203140906に追加できる場合があります。

おそらくこのように:

$today = date('YmdHi');
$startDate = date('YmdHi', strtotime('2012-03-14 09:06:00'));
$range = $today - $startDate;
$rand = rand(0, $range);
echo "$rand and " . ($startDate + $rand);

または、これを実行して、過去10日間のランダムな日付を生成できます。

$today = date('YmdHi');
$startDate = date('YmdHi', strtotime('-10 days'));
$range = $today - $startDate;
$rand = rand(0, $range);
echo "$rand and " . ($startDate + $rand);
于 2012-05-17T18:00:47.260 に答える
1
<?php 
$then = strtotime('2012-03-14 09:06:00'); 
$now = time();
for($i=0; $i<100; $i++) echo date('YmdHi', rand($then, $now)), '<br>'; 
?>

ちなみに...「uniqid()」を使用することもできます

于 2012-05-17T18:12:20.633 に答える
0

コメントでの説明があれば、 shuffle()関数で問題を解決できる可能性があります。2つの配列を作成できます。1つは日付のリストで、もう1つはランダムに拡散したいデータで、シャッフルされたデータから単純に読み取ります。コード例がないので、詳細はお任せします。

于 2012-05-21T14:09:27.147 に答える