Wet пишет:Задача: подсчитать значения по порядку (по ключам от 0-4) и округлить с условием:
1) если значение < 5400, то округляем до 3600
2) если значение < 7200 и >= 5400, то округляем до 7200 Wet пишет:На выходе должны получить такой массив
PHP:
скопировать код в буфер обмена
array (
0 => 4000,
1 => 7000
)
Вы противоречите сами себе, как на выходе может быть такой массив, если мы все результирующий значения будет округлять до 3600, 7200 или исключать?
Вот так у меня получилось:
PHP:
скопировать код в буфер обмена
function addInArray($value, &$array) { if($value < 5400) { $array[] = 3600; }elseif($value < 7200) { $array[] = 7200; } } 0 => 1500, 1 => 500, 2 => 2000, 3 => 7000, 4 => 10000 ); $re = []; if($length > 0) { $s = $ar[0]; for ($i = 1; $i < $length; $i++) { $value = $ar[$i]; if (($s + $value) > MAX) { addInArray($s, $re); $s = $value; }else{ $s += $value; } } addInArray($s, $re); }
На выходе Цитата:array (size=2)
0 => int 3600
1 => int 7200
Если не выполнять первые 2 условия, а действовать по иному "вашему" алгоритму описанному ниже, тогда получается 4000 7000 для этого просто поправим функцию, в которой в принципе больше и не будет надобности:
PHP:
скопировать код в буфер обмена
function addInArray($value, &$array) { if($value < 7200) { $array[] = $value; } } 0 => 1500, 1 => 500, 2 => 2000, 3 => 7000, 4 => 10000 ); $re = []; if($length > 0) { $s = $ar[0]; for ($i = 1; $i < $length; $i++) { $value = $ar[$i]; if (($s + $value) > MAX) { addInArray($s, $re); $s = $value; }else{ $s += $value; } } addInArray($s, $re); }
На выходе:
Цитата:array (size=2)
0 => int 4000
1 => int 7000 (Отредактировано автором: 29 Июня, 2016 - 12:58:49)
|