Tôi có cách tiếp cận hơi khác so với một số câu trả lời ở đây. Tôi tạo ra một tỷ lệ phần trăm lỏng lẻo dựa trên số lượng các mục bạn muốn tổng hợp, và sau đó cộng hoặc trừ 10% trên cơ sở ngẫu nhiên.
Sau đó tôi làm điều này n-1 lần (n là tổng số lần lặp), vì vậy bạn có phần còn lại. Số còn lại là số cuối cùng, không phải ngẫu nhiên, nhưng nó dựa trên các số ngẫu nhiên khác.
Hoạt động khá tốt.
/**
* Calculate n random numbers that sum y.
* Function calculates a percentage based on the number
* required, gives a random number around that number, then
* deducts the rest from the total for the final number.
* Final number cannot be truely random, as it's a fixed total,
* but it will appear random, as it's based on other random
* values.
*
* @author Mike Griffiths
* @return Array
*/
private function _random_numbers_sum($num_numbers=3, $total=500)
{
$numbers = [];
$loose_pcc = $total/$num_numbers;
for($i = 1; $i < $num_numbers; $i++) {
// Random number +/- 10%
$ten_pcc = $loose_pcc * 0.1;
$rand_num = mt_rand(($loose_pcc - $ten_pcc), ($loose_pcc + $ten_pcc));
$numbers[] = $rand_num;
}
// $numbers now contains 1 less number than it should do, sum
// all the numbers and use the difference as final number.
$numbers_total = array_sum($numbers);
$numbers[] = $total - $numbers_total;
return $numbers;
}
này:
$random = $this->_random_numbers_sum();
echo 'Total: '. array_sum($random) ."\n";
print_r($random);
Đầu ra:
Total: 500
Array
(
[0] => 167
[1] => 164
[2] => 169
)
này là có thể. Bạn đã thực hiện bất kỳ nỗ lực nào chưa? –
Bạn đang gặp sự cố nào trong số này? Bạn có biết cách tạo số ngẫu nhiên không? –
Điều này có vẻ không phải là vấn đề về PHP? – benck