2012-04-28 33 views
3

我正在尋找在PHP中的有效的方式等於部分劃分數除以一個整數相等。數字將始終爲整數(不浮點數)。中X部分

假設我有值的數組$小時從「1」到「24」($小時[「1」],等等)和含整數的變量$ int值。我想達到的效果是將$ int的值平均分配到24個部分,這樣我就可以將值分配給每個相應的數組條目。 (如果數字是奇數,其餘的將被添加到24中的最後或第一個值中)。

Regards,

+0

我不知道很多PHP,但分割成若干等份,通常用'/'做.. 。 – 2012-04-28 18:24:53

+0

@larsmans對。但是因爲結果可能是偶數,所以我很可能會遇到(例如:400/24 = 16.667,並且不能平均分配)。 – 2012-04-28 18:26:56

+0

@ Jean-PhilippeMurray:在這種情況下你想做什麼? – 2012-04-28 18:34:24

回答

13

以下是您正在查找的算法;它均勻地分佈整數NK細胞:

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 
+0

你去那裏!我一度認爲我可以做N/K操作的循環作爲停止的條件。我剛剛在這裏學到了一些東西,它的功能非常棒!謝謝 ! – 2012-04-28 18:48:49

+0

@讓PhilippeMurray:請檢查出Zombaya只是爲了我的算法做出的修正;循環應該運行到'N mod K',而不是'N/K'。 – 2012-04-28 19:00:36

+0

你能否解釋一下N模K和N/K最後的區別是什麼?我似乎沒有看到任何區別,而測試的兩種解決方案... – 2012-04-28 19:21:44

3

試試這個代碼

<?php 
$num = 400; 
$val = floor($num/24); 

for($i=0;$i<24;$i++) { 
    $arr[$i] = $val; 
} 

$arr[0] += $num - array_sum($arr); 
?>