用加起来达到指定总数的数字填充数组,但不超过项目最大值

问题描述 投票:0回答:3

我需要用数字填充一个数组,举几个例子:

  • nbreParChargement = 4; 10个
    预期输出:

    $niveaux = array(4,4,2);
    4+4+2 = 10

  • nbreParChargement = 6; 14 份
    预期输出:

    $niveaux = array(6,6,2);
    6+6+2 = 14

  • nbreParChargement = 16; 13 份
    预期输出:

    $niveaux = array(13);
    13 = 13

  • nbreParChargement = 4; 30 份
    预期输出:

    $niveaux = array(4,4,4,4,4,4,4,2);
    4+4+4+4+4+4+4+2 = 30

我尝试解决这个问题,但我不知道完美的解决方案:

function chargement($nbre, $nbreParChargement) {
    $niveaux = array();
    for($i=0; $i<=$nbre; $i++){
        $niveaux[$i] = $i + $nbreParChargement;         
    }
}
php arrays sum
3个回答
2
投票

另一个实现,有两行代码,适用于 php >= 5.6:

function chargement($nbre, $nbreParChargement){
    $niveaux = array_fill(0, floor($nbre/$nbreParChargement), $nbreParChargement);
    $niveaux[] = $nbre - array_sum($niveaux);

    return $niveaux;
}

var_dump(chargement(10, 4));
var_dump(chargement(14, 6));
var_dump(chargement(13, 16));
var_dump(chargement(30, 4));

array_fill
用带有
$nbre/$nbreParChargement
值的
$nbreParChargement
条目填充数组。最后一个值是
$nbre
与其他元素之和之间的差值,由
$nbreParChargement * floor($nbre/$nbreParChargement)
给出,该值始终 > 0。

演示

这只适用于 php >= 5.6,因为

array_fill
仅从该版本接受
0
作为
num
。以前,
num
必须大于零。

因此,对于任何版本的 php:

function chargement($nbre, $nbreParChargement){
    $niveaux = array();
    if ($n = floor($nbre/$nbreParChargement)) {
        $niveaux = array_fill(0, $n, $nbreParChargement);
    }

    $niveaux[] = $nbre - array_sum($niveaux);
    return $niveaux;
}

演示


1
投票
<?php
    function chargement($nbre, $nbreParChargement){
       $niveaux = array();
       $n=(int)($nbre/$nbreParChargement);//Calculating how many times to $nbreParChargement add number to an array.
       for($i=0;$i<$n;$i++){
          $niveaux[]=$nbreParChargement;//Adding $nbreParChargement  value to array
       }
       $diff=$nbre-array_sum($niveaux);//Calculating diff of given and our calculated value
       if($diff!=0){//If the diff value is >0 then adding the remaining that value to an array
          $niveaux[]=$diff;
       }
      return $niveaux; //Returning array
    }
    print_r(chargement(14,4));

Eval 中的输出

输出:

Array
(
    [0] => 4
    [1] => 4
    [2] => 4
    [3] => 2
)

请按照以下步骤解决您的问题:

  1. 计算 nbreParChargement 将数字添加到数组中的次数,
  2. 将该数字添加到数组中多次(n)。
  3. 计算给定值和我们的总值的差异
  4. 如果 Diff >0,则意味着我们错过了 diff 编号,将该编号添加到数组并返回。

-1
投票

试试这个:

<?php
function chargement($nbre, $nbreParChargement){

    $niveaux = array(); 
    if($nbreParChargement <= $nbre) {
        $repetitionCount = floor($nbre / $nbreParChargement);
        $remainder = $nbre % $nbreParChargement;

        for($i = 0; $i < $repetitionCount; $i++){
            $niveaux[] = $nbreParChargement;
        }

        if(!empty($remainder)) {
            $niveaux[] = $remainder;
        }
    } else {
        $niveaux[] = $nbre;
    }
    return $niveaux;
}

$array = chargement(13, 16);

echo '<pre>';
print_r($array);
© www.soinside.com 2019 - 2024. All rights reserved.