Как мне суммировать элементы в цикле php? - PullRequest
0 голосов
/ 27 ноября 2010

Я изучаю PHP в течение нескольких дней, и у меня возникла смущающая легкость вопрос.Я хочу суммировать элементы в цикле из 500 элементов.Я хочу подсчитать общее количество 500 + 499 + 498 и т. Д.

Вот мой код:

for ($i=1; $i<=500; $i++)
{

 // echo $i . "<br />";
 $total = 0;
 $total = $total + $i;
 return $total;


}

echo $total . "<br />";

?>

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

Ответы [ 7 ]

6 голосов
/ 27 ноября 2010

Вы также можете выполнить

echo array_sum(range(0,500)); // 125250

или выполнить весь расчет без for тела:

for( $total = $i = 0; $i <= 500; $total += $i++ );
echo $total;  // 125250

и нескольких других подходов ( Решение Даниэля особенно приятно).

Оба из вышеперечисленного эквивалентны тому, что вы, вероятно, ищете

$total = 0;
for ($i=1; $i<=500; $i++) {
    $total = $total + $i;
}
echo $total;

Как уже указывалось в другом месте, когда вы делаете $total = 0; внутри цикла for , вы перезапишете предыдущее значение для $total, и добавление в него return завершит ваш сценарий, если цикл не находится внутри функции.

6 голосов
/ 27 ноября 2010

Вытащить инициализацию и оператор возврата из цикла:

$total = 0;

for ($i=1; $i<=500; $i++) {

    echo $i . ""; 
    $total = $total + $i; 

}

echo $total . "";
return $total;
2 голосов
/ 27 ноября 2010

Похоже, вам просто нужно переместить строку $total = 0; из вашего цикла ... В противном случае она будет установлена ​​на 0 на каждой итерации.

Вам также нужно переместить эту строку return $total; наружу, как отмечено в комментарии ниже: @ Webnet .

Также обратите внимание, что вы можете выполнить этот расчет в постоянное время без перебора всех чисел путем нахождения суммы арифметической прогрессии :

S n = 1 / 2 n (a 1 + a 2 )

S n = 250 (1 +500)

= 125250

0 голосов
/ 16 мая 2016
$total = 0;

for ($i=1; $i<=500; $i++) {

    echo $i . ""; 
    $total = $total + $i; 

}

echo $total . "";
return $total;
0 голосов
/ 27 ноября 2010

У вас есть две ошибки:

Сначала вы устанавливаете $total на 0 каждый раз, когда цикл повторяется.

Затем вы используете return, здесь происходит то, что он отменяет дальнейшее выполнение, так что цикл в основном просто запускался один раз.

Попробуйте это.

$total = 0;
for ($i=1; $i<=500; $i++){
   $total = $total + $i;
}

echo $total;
0 голосов
/ 27 ноября 2010

Ну, вы каждый раз сбрасываете $total в ноль и используете return вне оператора ...

В любом случае, ответ (500*501)/2 = 250*501 = 125250 (базовая математика)

0 голосов
/ 27 ноября 2010

Ваш код должен быть ...

$total = 0;
for ($i=1; $i<=500; $i++) {

 // echo $i . "<br />";

 $total = $total + $i;

}

echo $total . "<br />";

return $total; прервет цикл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...