Php 检查一系列数字的总和是否等于设定值,必要时增加

Php 检查一系列数字的总和是否等于设定值,必要时增加,php,random,Php,Random,我有一个每分钟运行一次的php脚本。该脚本运行第二个脚本,然后在给定的时间内休眠 现在时间是静止的。每次20秒 我需要的是随机分配它睡觉的时间。总时间可以超过60秒,但不能少于60秒 这就是我现在拥有的 $sleep1 = rand(2,18); $sleep2 = rand(2,18); $sleep3 = rand(2,18); $sleep4 = rand(2,18); if $sleep1 + $sleep2 + $sleep3 + $sleep4 <= 60 ? $sleep1

我有一个每分钟运行一次的php脚本。该脚本运行第二个脚本,然后在给定的时间内休眠

现在时间是静止的。每次20秒

我需要的是随机分配它睡觉的时间。总时间可以超过60秒,但不能少于60秒

这就是我现在拥有的

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

如果$sleep1+$sleep2+$sleep3+$sleep4为什么不将该值传递给

如果您确实需要您的方法,只需使用:


如果您没有绑定到$sleep1,…,$sleep4,但可以使用类似$sleep[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";
}

有没有理由不把多余的钱加到
$sleep1

if ( ($sleep1 +  $sleep2 + $sleep3 + $sleep4) <= 60) {
    $sleep1 += 61 - ($sleep1 +  $sleep2 + $sleep3 + $sleep4);
}

if($sleep1+$sleep2+$sleep3+$sleep4)如果您可以拥有多于或不需要4个$sleep_uuu变量:

<?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;

?>
<?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
if ( ($sleep1 +  $sleep2 + $sleep3 + $sleep4) <= 60) {
    $sleep1 += 61 - ($sleep1 +  $sleep2 + $sleep3 + $sleep4);
}
<?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;

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

71