我想重新平衡陣列中的資料以使所有元素的值相同。例如
前:
Array
(
[1] => 2
[2] => 4
[3] => 1
[4] => 2
)
后:
Array
(
[1] => 3
[2] => 2
[3] => 2
[4] => 2
)
之前的另一個例子
:
Array
(
[1] => 2
[2] => 3
[3] => 1
[4] => 2
)
后:
Array
(
[1] => 2
[2] => 2
[3] => 2
[4] => 2
)
使用 PHP 語言,任何人都知道如何做到這一點?
uj5u.com熱心網友回復:
這是一個簡單的方法:
<?php
$a = [2, 4, 1, 2];
$sum = array_sum($a);
$len = count($a);
$r = $sum % $len;
$q = ($sum - $r) / $len;
$res = [];
for($i=0;$i<$len;$i )
$res[] = $i < $r ? $q 1 : $q;
var_dump($res);
?>
uj5u.com熱心網友回復:
使用 PHP 功能的解決方案。注意最后一行的成語。
<?php
$arr = [6,4,9,3,8,2,1,5];
// Calculate the total of the array elements
$sum = array_sum($arr);
$len = count($arr);
// Using integer division and modulo arithmetic calculate the average and remainder
$avg = intdiv($sum,$len);
$rem = $sum % $len;
// Create a result array and fill with the average
$result = array_fill(0,$len,$avg);
// Spread the remainder over the first few elements.
while($rem){$result[--$rem] ;}
var_dump($result);
?>
示例:https ://3v4l.org/nY2Fo
uj5u.com熱心網友回復:
您可以在迭代時不斷減少總和和陣列計數,以避免跟蹤模數。
代碼:(演示)
$array = [2, 4, 1, 2];
$sum = array_sum($array);
$count = count($array);
$result = [];
foreach ($array as $i => $notUsed) {
$sum -= $result[] = ceil($sum / ($count - $i));
}
var_export($result);
// [3, 2, 2, 2]
或稍微重新排列為:(演示)
$result = [];
for (
$sum = array_sum($array), $count = count($array);
$count;
--$count
) {
$sum -= $result[] = ceil($sum / $count);
}
var_export($result);
或者,再次使用不同的回圈:(演示)
$array = [2, 4, 1, 2];
$sum = array_sum($array);
$count = count($array) 1;
$result = [];
while (--$count) {
$sum -= $result[] = ceil($sum / $count);
}
var_export($result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/485808.html
