我正在寻找在PHP中的有效的方式等于部分划分数除以一个整数相等。数字将始终为整数(不浮点数)。中X部分
假设我有值的数组$小时从“1”到“24”($小时[“1”],等等)和含整数的变量$ int值。我想达到的效果是将$ int的值平均分配到24个部分,这样我就可以将值分配给每个相应的数组条目。 (如果数字是奇数,其余的将被添加到24中的最后或第一个值中)。
Regards,
我正在寻找在PHP中的有效的方式等于部分划分数除以一个整数相等。数字将始终为整数(不浮点数)。中X部分
假设我有值的数组$小时从“1”到“24”($小时[“1”],等等)和含整数的变量$ int值。我想达到的效果是将$ int的值平均分配到24个部分,这样我就可以将值分配给每个相应的数组条目。 (如果数字是奇数,其余的将被添加到24中的最后或第一个值中)。
Regards,
以下是您正在查找的算法;它均匀地分布整数N
过K
细胞:
for i = 0 to K
array[i] = N/K # integer division
# divide up the remainder
for i = 0 to N mod K
array[i] += 1
你去那里!我一度认为我可以做N/K操作的循环作为停止的条件。我刚刚在这里学到了一些东西,它的功能非常棒!谢谢 ! – 2012-04-28 18:48:49
@让PhilippeMurray:请检查出Zombaya只是为了我的算法做出的修正;循环应该运行到'N mod K',而不是'N/K'。 – 2012-04-28 19:00:36
你能否解释一下N模K和N/K最后的区别是什么?我似乎没有看到任何区别,而测试的两种解决方案... – 2012-04-28 19:21:44
试试这个代码
<?php
$num = 400;
$val = floor($num/24);
for($i=0;$i<24;$i++) {
$arr[$i] = $val;
}
$arr[0] += $num - array_sum($arr);
?>
我不知道很多PHP,但分割成若干等份,通常用'/'做.. 。 – 2012-04-28 18:24:53
@larsmans对。但是因为结果可能是偶数,所以我很可能会遇到(例如:400/24 = 16.667,并且不能平均分配)。 – 2012-04-28 18:26:56
@ Jean-PhilippeMurray:在这种情况下你想做什么? – 2012-04-28 18:34:24