PHP с расчетом цикла

Может чем-то помочь, не знаю, как решить эту проблему с помощью цикла в PHP

      $pay = [20, 40 , 89, 300, 190, 15]; <br/>
$Capital = 1000; <br/>

Я хочу, чтобы цикл достиг этого результата

      1000-20 = 980 <br/>
980-40 = 940 <br/>
940-89 = 851 <br/>
851-300 = 551 <br/>
551-190 = 361 <br/>
361-15 = 346 <br/>

Мой код:

      $newbal = $Capital-$pay <br/>
for ($amount=$newbal; $amount>=$Capital; $amount-=$pay) {
    echo “{$amount} ”; <br/>
    $amount++; <br/>
}

Мой код дает мне этот результат:

      1000-20 = 980 <br/>
1000-40 = 960 <br/>
1000-89 = 911 <br/>
1000-300 = 700 <br/>
1000-190 = 810 <br/>
1000-15 = 985 <br/>

5 ответов

Простой цикл foreach по $payмассив с $balanceпеременная позволит выполнить простой расчет внутри цикла:

      $pay = [20, 40 , 89, 300, 190, 15];
$Capital = 1000; 

$balance = $Capital;
foreach ($pay as $p) {
    printf("%d - %d = %d\n", $balance, $p, $balance = $balance - $p);
}                                          ########################

Выход:

      1000 - 20 = 980
980 - 40 = 940
940 - 89 = 851
851 - 300 = 551
551 - 190 = 361
361 - 15 = 346

Вы несколько усложнили его, и показанный вами код выдает ошибки, а не указанный вами вывод.

Вы можете добиться этого более просто, перебирая $payмассив напрямую с foreach, и уменьшая остаток на сумму в текущей статье оплаты каждый раз:

      $pay = [20, 40 , 89, 300, 190, 15];
$capital = 1000;
$balance = $capital;
    
foreach ($pay as $item)
{
  $output = $balance."-".$item." = ";
  $balance -= $item;
  $output .= $balance;
  echo $output.PHP_EOL;
}

Рабочая демонстрация: http://sandbox.onlinephpfunctions.com/code/dd1189f2d48b3428986ce52a087fb425ee970621

Вместо использования сложного forцикл, я бы рекомендовал использоватьforeachзацикливаться на $payмассив и переопределить после echo.

Мы можем использовать "${}"синтаксис для использования переменных внутри строк .


Рассмотрим этот пример:

      <?php

$pay = [20, 40 , 89, 300, 190, 15];
$Capital = 1000; 
$newBal = $Capital;

foreach ($pay as $amount) {
    
    echo "${Capital} - ${amount} = " . ($Capital - $amount) . PHP_EOL;
    $Capital -= $amount; 
}

Это выведет следующее, как вы можете проверить в этой онлайн-демонстрации .

      1000 - 20 = 980
980 - 40 = 940
940 - 89 = 851
851 - 300 = 551
551 - 190 = 361
361 - 15 = 346

Мы можем выполнить задание $Capitalвстроенный, поэтому я прочитал:

      echo "${Capital} - ${amount} = " . ($Capital = $Capital - $amount) . PHP_EOL;

Но для удобочитаемости я бы добавил дополнительную строку, как в моем примере.

      <?php

$pay = [20, 40 , 89, 300, 190, 15];
$Capital = 1000;

foreach ($pay as $amount) {
    $newCap = $Capital - $amount; // calculate the new amount for output
    echo $Capital . ' - ' . $amount . ' = ' . $newCap . '<br>'; // output it
    $Capital = $newCap; // update the new amount for the next iteration
}

Онлайн-демонстрация: https://3v4l.org/qmqcv

Приведенный ниже код перебирает $paysмассив целых чисел.

каждый цикл вычисляет уравнение $captialминус одно из целых чисел и повторений, это вычисляется и сохраняется в виде строки в $linesпеременной, и в конце каждого цикла мы пересчитываем и обновляем новое значение $capitalна основании предыдущего расчета capital = capital - pay

      <?php
    $pays = [20, 40 , 89, 300, 190, 15];
    $capital = 1000;

    $lines = [];

    foreach($pays as $pay){
        $lines[] = $capital . "-" . $pay . " = " . ($capital - $pay) . "<br/>";
        $capital -= $pay;
    }

    echo implode("\n", $lines);

?>
Другие вопросы по тегам