2009-07-13 5 views
0

1分に1回実行するPHPスクリプトがあります。スクリプトは2番目のスクリプトを実行してから、一定時間スリープします。一連の数字が設定値に加算されているかどうかを確認し、必要に応じて値を増やします。

今は時間が静的です。毎回20秒。

私が必要とするのは、睡眠時間を無作為化することです。これは、合計で60秒を超えることはできますが、少なくはありません。

これは私の今のものです。私は違いを補うために、変数のうちの1つまたは複数の値を大きくする必要があり、すべての$sleep変数を追加し、それがある場合は、合計が60未満であるかどうかを判断する必要が

$sleep1 = rand(2,18); 
$sleep2 = rand(2,18); 
$sleep3 = rand(2,18); 
$sleep4 = rand(2,18); 
if $sleep1 + $sleep2 + $sleep3 + $sleep4 <= 60 ? 

答えて

1

あなたがより多くを持つことができ、または正確に4 $ sleep_変数を必要としない場合:

Array 
(
    [0] => 5 
    [1] => 2 
    [2] => 18 
    [3] => 9 
    [4] => 11 
    [5] => 10 
    [6] => 3 
    [7] => 13 
) 

71 

<?php 

$time = 0; 
$i = 1; 
$array = array(); 

do { 
    $sleep{$i} = rand(2,18); 
    $array[] = $sleep{$i}; 
    $time += $sleep{$i}; 
    $i++; 
} while ($time <= 60); 

print_r($array); 

echo $time; 

?> 

はあなたのようなものを提供します

4

なぜ値をrand()に渡しませんか?あなたが本当にあなたの方法が必要な場合は

sleep(rand(60, 120)); 

、ちょうど使用max()

sleep(max(60, $sleep1 + $sleep2 + $sleep3 + $sleep4)); 
2

あなたは$にバインドされていない場合はSLEEP1、...、$ sleep4ますが$スリープのようなもの[0を使用することができます... n]は:

<?php 
$threshold = 60; 

$sleep = array(); 
$sleep[] = rand(2,18); 
$sleep[] = rand(2,18); 
$sleep[] = rand(2,18); 
$sleep[] = rand(2,18); 

if (array_sum($sleep) < $threshold) { 
    $sleep['padding'] = $threshold - array_sum($sleep); 
} 

foreach($sleep as $i=>$value) { 
    echo $i, ': ', $value, "\n"; 
} 

編集:あなたは、 "スケール" の$睡眠の各値は、彼らが60(またはそれ以上)を合計するようにしたい場合:

<?php 
$threshold = 60; 

$sleep = array(); 
$sleep[] = rand(2,18); 
$sleep[] = rand(2,18); 
$sleep[] = rand(2,18); 
$sleep[] = rand(2,18); 

echo 'before: ', join(',', $sleep), '=', array_sum($sleep), "\n"; 
$sum = array_sum($sleep); 
if ($sum < $threshold) { 
    $add = (int)(($threshold-$sum)/count($sleep)); 
    $remainder = $threshold - ($sum+$add*count($sleep)); 
    foreach($sleep as &$v) { 
    $v += (int)$add; 
    if ($remainder-- > 0) { 
     $v += 1; 
    } 
    } 
} 

echo 'after: ', join(',', $sleep), '=', array_sum($sleep), "\n"; 

プリント

before: 2,13,12,15=42 
after: 7,18,16,19=60 

before: 10,9,3,12=34 
after: 17,16,9,18=60 

before: 14,17,16,15=62 
after: 14,17,16,15=62 
1

余分なものを$sleep1に貼り付けない理由はありますか?

if (($sleep1 + $sleep2 + $sleep3 + $sleep4) <= 60) { 
    $sleep1 += 61 - ($sleep1 + $sleep2 + $sleep3 + $sleep4); 
} 
関連する問題