Хочу вам продемонстрировать скрипт для расчёта долга или ипотеки по месяцам. В этой функции есть 4 переменные: вся сумма, платёж, номер месяца (начало оплаты), количество оплаченных месяцев. В распечатанном массиве PHP вы увидите как сумма вашего долга уменьшается (помесячно). Вы наглядно увидите сколько нужно заплатить и сколько месяцев это будет длится. В дальнейшем я сделаю онлайн скрипт, в котором можно будет проверить состояние вашего долга. Сам скрипт содержит много условий if-else. Вам не придётся брать в руки калькулятор и производить какие-либо расчёты. Скрипт вычитает величину месячного платежа из суммы вашего долга и выводит результат на экран. Когда цикл for доходит до конца, то цикл остановится и останется небольшой остаток. Этот остаток нужно вычесть и получается 0 в качестве результата. В этом случае расчёт будет окончен. Погрешностей в расчётах скрипт не имеет.
Я использовал цикл for. Сначала я использовал цикл while. У меня не получилось )). Цикл for хорошо подошёл для этих целей. Но я не стал использовать его стандартным образом. У меня переменная $i равна всей сумме. Я от $i отнимаю месячный долг. Таким образом уменьшается большая основная сумма, но она не должна быть меньше 0. Если цикл имеет неограниченное количество итераций, то сервер зависнет. Прежде чем выполнить цикл, убедитесь что он имеет ограничение. Если вы все-таки допустили ошибку, то нажмите на клавишу Esc. Таким образом вы остановите выполнение скрипта. Если скрипт не остановится, то перезагрузите сервер. У любого сервера есть время выполнения скрипта. Это можно просмотреть при помощи функции phpinfo(). Все месяцы я поместил в массив. В массиве первым элементом является январь. У элемента января будет 0 индекс [0 => 'январь']. Когда количество месяцев будет больше 12, то скрипт обнуляет переменную $m. Переменная $m отвечает за вывод месяцев.
Поговорим немного о встроенных функциях. Функция end() выводит последний элемент массива. Count() показывает количество элементов в массиве. Функция print_r() распечатает массив. Она является отладочной функцией. Я использую сокращенный синтаксис. $a += 1 - это увеличение $a на единицу. $a -= 1 - уменьшение переменной на единицу.
/* getDolg()
* $allPrise - вся сумма долга
* $minus - месячный платёж
* $m - номер месяца, в котором была первая оплата
* $num - количество оплаченных месяцев,
* если вы не оплатили ни одного месяца,
* то поставьте 0 вместо $num
* */
function getDolg($allPrise, $minus, $m, $num=null){
if($num == null) $num = 0;
$m -= 2;
$month = array('январь', 'февраль',
'март', 'апрель', 'май', 'июнь', 'июль', 'август',
'сентябрь', 'октябрь','ноябрь',
'декабрь');
$g = 0;
for($i = $allPrise; $i > 0; $i)
{
$g++;
$m++;
if($m >= 12)
{
$m = 0;
}
$i -= $minus;
if($i > 0)
{
if($num < $g)
{
echo "".$g." ".
$month[$m]." месяц => ".$i." рублей
";
$count[$g] = $i;
}
else
{
echo "".$g." ".$month[$m]." месяц => ".$i.
" рублей - оплачено
";
$count[$g] = $i." - оплачено";
}
}
}
if($num == $g)
{
echo "".$g." ".$month[$m++]." месяц => ".
end($count)." рублей - оплачено
";
$count[$g] = $i." - оплачено";
}
else
{
echo "".$g." ".$month[$m++]." месяц => ".
end($count)." рублей
";
$count[$g] = $count[$g - 1];
}
$ostatok = $allPrise - ($minus * $num);
$numMonth = count($count) - $num;
echo "Итог: ".count($count) ." месяца, ежемесячный платёж: ".
$minus." рублей, осталось заплатить: ".
$ostatok." за ".$numMonth." месяца
";
return $count;
}
$allPrise = 500000;
$minus = 15000;
$arr = getDolg($allPrise, $minus, 1, 0);
Функция getDolg() не только выводит результат на экран, но и возвращает массив. Вы можете дополнительно вывести его на экран, применив функцию print_r(). Допустим у вас сумма долга равна 100000 рублей. Вы будите платить 15000 рублей в месяц. Вы уже оплатили за 3 месяца. Как узнать сколько месяцев нужно платить? Поставьте в входной параметр функции getDolg(х, х х, 3) значение 3. Вам останется заплатить за 4 месяца и вы свободный человек )))
$allPrise = 100000;
$minus = 15000;
$arr = getDolg($allPrise, $minus, 1, 3);
print_r($arr);
/*
Array
(
[1] => 85000 - оплачено
[2] => 70000 - оплачено
[3] => 55000 - оплачено
[4] => 40000
[5] => 25000
[6] => 10000
[7] => 10000
)
*/