从具有条件的数组生成数组

时间:2012-06-09 10:17:50

标签: php arrays

假设我有一个数组

$x = (31,12,13,25,18,10);

我希望以每个数组元素的值为32的方式减少此数组。 所以下班后我的阵列将成为

$newx = (32,32,32,13);

我必须以这样的方式生成这个数组,数组值的总和绝不会大于32。因此,要创建第一个值,我会从第二个索引值1减少12,因此第二个值将变为11,第一个索引值将变为31+1 = 32。此过程应继续,以便每个数组值等于32

2 个答案:

答案 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
)