<?php
error_reporting(-1);

function totalCreditCost($amount, $monthlyPayment, $interestRate, $comission, $downpayment) {
	$totalPayments = 0;
	$debtAmount = $amount + $downpayment; // сумма вместе с платежом за открытие (???)
	while ($debtAmount > 0) {
		$debtAmount = $debtAmount * $interestRate + $comission;
		$payment = $debtAmount < $monthlyPayment 
					? $debtAmount 
					: $monthlyPayment; // чтоб не платить больше чем должны.
		$debtAmount    -= $payment; // Задолженность по кредиту
		$totalPayments += $payment; // Сумма выплат
	}
	return $totalPayments;
}

$banks = [
	'first'  => array('rate' => 1.04, 'comission' => 500,  'downpayment' => 0),
	'second' => array('rate' => 1.03, 'comission' => 1000, 'downpayment' => 0),
	'third'  => array('rate' => 1.02, 'comission' => 0,    'downpayment' => 7777)
	// Хоть +9000 разных банков, код меняться уже не будет
];

$creditCosts = [];
foreach ($banks as $name => $params) {
	$creditCosts[$name] = totalCreditCost(  40000, 
											5000, 
											$params['rate'], 
											$params['comission'], 
											$params['downpayment']);
	echo "Выплаты в банке $name - " . $creditCosts[$name] . "\n";
}

echo "Наименьшая сумма - " . min($creditCosts); 
echo " выдаётся " . array_search(min($creditCosts), $creditCosts) . " банком\n";
