假设我有一个数组
$x = (31,12,13,25,18,10);
我希望以每个数组元素的值为32
的方式减少此数组。
所以下班后我的阵列将成为
$newx = (32,32,32,13);
我必须以这样的方式生成这个数组,数组值的总和绝不会大于32
。因此,要创建第一个值,我会从第二个索引值1
减少12
,因此第二个值将变为11
,第一个索引值将变为31+1 = 32
。此过程应继续,以便每个数组值等于32
。
答案 0 :(得分:2)
使用一些基本的数学最简单:
$input = array(31,12,13,25,18,10);
$val = 32; // set the value: 32
$sum = array_sum($input); // calculate sum: 109
$output = array_fill(0, $sum/$val, $val); // fill in int(109/32) = 3 reps of 32
$rest = $sum % $val; // however, 109*32 = 96,
if ($rest) { // so if there is a rest (here 13)
$output[] = $rest; // we add the remaining 13
}
最终$output
:
array (
0 => 32,
1 => 32,
2 => 32,
3 => 13,
)
答案 1 :(得分:0)
稍微详细一点的解释每一步的方法 -
$x = array(31,12,13,25,18,10);
$total = 0;
// get the total values of the array
foreach($x as $val){
$total += $val;
}
// calculate whole divisions
$divisions = floor($total / 32);
// calculate remainder
$remainder = $total % 32;
$finalArr = array();
// populate array with whole whole divisions
for ($i=0;$i<$divisions;$i++){
$finalArr[] = 32;
}
// last element is the remainder
if($remainder > 0 ){
$finalArr[] = $remainder;
}
输出 -
Array
(
[0] => 32
[1] => 32
[2] => 32
[3] => 13
)