我需要用数字填充一个数组,举几个例子:
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。
演示。
这只适用于 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;
}
演示。
<?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));
输出:
Array
(
[0] => 4
[1] => 4
[2] => 4
[3] => 2
)
请按照以下步骤解决您的问题:
试试这个:
<?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);