我需要用数字填充数组,下面是一些示例:


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> = 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。

Demo

这仅适用于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;
}


Demo

关于php - 用特定数字填充数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33100780/

10-08 22:14