Цикл php не работает с $ i, назначенным на 21-значный номер - PullRequest
1 голос
/ 27 сентября 2011

У меня есть цикл php:

for($i = $_GET['start']; $i < $_GET['end']; $i++){

echo $i;

}

, когда $ i назначается на что-то вроде 100000000000000000000, скрипт не запускается и не возвращает ошибок !!В любом случае я могу это исправить?

спасибо

Ответы [ 4 ]

3 голосов
/ 27 сентября 2011

Используемое вами значение слишком велико для обработки PHP.

"Размер целого числа зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением."

http://php.net/manual/en/language.types.integer.php

Вот решение, которое я протестировал, используя строки вместо целых чисел, и оно работает:

$start = (string)$_GET['start'];
$end = (string)$_GET['end'];

for($i = $start; strcmp($i, $end); $i = bcadd($i, 1)){
    echo $i . "<br>";
}
0 голосов
/ 27 сентября 2011

Почему бы не использовать разницу между началом и концом, чтобы ваши циклы были меньше:

<?php

$min = 0;
$max = $_GET['end'] - $_GET['start'];
for($i = $min; $i < $max; $i++){
    echo $i + $_GET['start'];
}
0 голосов
/ 27 сентября 2011

Во-первых, не помещайте $_GET['start'] и $_GET['end'] непосредственно в ваш код.

Вместо этого присвойте их переменным и убедитесь, что они числовые и находятся в диапазоне.

Например: end не может быть меньше, чем start, и т. Д. *

for($i = $start; $i < $end; $i++){

echo $i;

}

Во-вторых, большое число повесит ваш сервер.

0 голосов
/ 27 сентября 2011

Прежде всего вам необходимо указать, какой диапазон чисел должен поддерживать ваш скрипт.

Затем вам нужно найти правильные структуры данных для обработки данных, например, integer - или, более вероятно, в вашем случае - gmp чисел .

Тогда вы можете просто кодировать. Цикл for работает так, как было объявлено, возможно, вы не захотите жестко его кодировать против $_GET, вероятно.

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