gpt4 book ai didi

PHP创建整数值数组,受n个偏移量和所有总和的限制

转载 作者:搜寻专家 更新时间:2023-10-31 20:56:55 26 4
gpt4 key购买 nike

正如标题所说...让我们看看代码(更好地解释它):

$maxItemAmount = 10;
$maxItemQtyTotal = 40;

$qtyMap = array_map(function () use ($maxItemQtyTotal) {
// returns something with rand()
// but relative to $maxItemQtyTotal
}, array_fill(0, $maxItemAmount, null));

// expecting: (10 items with a total qty of 40)
// [
// // numeric key => qty
// 0 => 3, // 3 total
// 1 => 4, // 7 total
// 2 => 9, // 16 total
// 3 => 2, // 18 ...
// 4 => 6, // 24
// 5 => 1, // 25
// 6 => 2, // 27
// 7 => 8, // 35
// 8 => 3, // 38
// 9 => 2, // 40
// ]

所以我发现了这个很好的“技巧”来创建数组中的偏移量这允许我使用回调返回值。

我现在搜索的是一种返回随机数的方法,但相对于给定的输入 $maxItemQtyTotal

另一个例子:

$maxItemAmount = 4;
$maxItemQtyTotal = 81;

// expecting: (4 items with a total qty of 81)
// [
// // numeric key => qty
// 0 => 11, // 11 total
// 1 => 5, // 16 total
// 2 => 42, // 58 total
// 3 => 23, // 81 total
// ]

我无法返回 rand(1, $maxItemQtyTotal)。我将不得不返回 rand(1, $n) 其中 $n 是最大数量除以最大项目

但仍然是随机的,最后一个 rand(1, $n) 剩下的是什么?

我希望我能描述一下 :)

最佳答案

我不确定 array_fill,但我知道可以通过使用 for 循环创建一个简单的函数来实现:

function randomNumbers(int $N, int $M): array {
$nums = [];
for ($i = 0, $runningTotal = 0; $i < $N - 1; $i++) {
$ceil = ceil(($M - $runningTotal) / ($N - $i)); // What is the maximum reasonable number we can push into array
$nums[] = $num = mt_rand(1, $ceil);
$runningTotal += $num;
}
$nums[] = $M - array_sum($nums);
shuffle($nums); // Randomize elements so that they appear more random
return $nums;
}

这将生成一个包含 N 个随机数的数组,这些随机数的总和为 M。

关于PHP创建整数值数组,受n个偏移量和所有总和的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57445423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com