@thinksdifferent

Как распределить остаток по индексу массива, от меньшего к большему?

$amount = 5;
$wareh = 4;

$wareh_id =
array(
'3'=>3,
'2'=>2,
'1'=>1,
'0'=>0
);

//arsort($wareh_id);
$i= 1;
$used = 0;
$arr=[];
foreach($wareh_id as $key=>$value){

if($i <= $wareh){
$used += ($current = round($amount * $i / $wareh - $used));
$arr[$key] = $current;
}
$i++;
}

Получаю ответ :

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

а нужно :

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

Должен быть приоритет к индексу '0', далее по остаточному признаку.

вот для примера 10 штук :
Array
(
[3] => 3
[2] => 2
[1] => 3
[0] => 2
)
а должно быть
Array
(
[3] => 2
[2] => 2
[1] => 3
[0] => 3
)
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Использовать не foreach, а классический for.
И вычислять значения для заполнения сразу, а не пересчитывать на каждой итерации.
$count = count($wareh_id);
$val = ceil($amount / $count);
$n = $amount % $count;
if ($n === 0) {
    $n = $count;
}
for ($i = 0; $i < $n; $i += 1) {
    $wareh_id[$i] = $val;
}
$val -= 1;
for (;$i < $count; $i += 1) {
    $wareh_id[$i] = $val;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы