2011-09-26 1 views
1

에 할당 : $ 내가 100000000000000000000처럼 뭔가 스크립트 나던 실행을 할당하고 오류를 반환하지 않습니다PHP 루프 나던 작품은 내가 같은 PHP 루프가 21 자리 숫자

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

echo $i; 

} 

! 어쨌든 내가 고칠 수 있니?

감사합니다.

+2

시작/끝이 무엇을입니까? 이 숫자가 정말 필요한가요? 이 루프는 오래 걸릴 것입니다. – galchen

+1

저는 그것이 실행될 것이라고 확신합니다. 정수 범람으로 인해 본문이 실행되지 않습니다. – hakre

+0

아니요, 시작은 '100000000000000000000'과 같을 것이고 끝은'100000000000000001000'과 같을 것입니다. 왜 이런 식으로 선택했는지 묻지 마십시오.이 방법이 필요합니다. – ahoura

답변

3

사용중인 값이 너무 커서 처리 할 수 ​​없습니다.

"정수의 크기는 플랫폼에 따라 다르지만 최대 값은 약 20 억입니다." 여기

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

ok는 PHP가'$ int = 100000000000000000000'과'$ int ++'와 같은 값으로 수학 할 수 없다는 것을 의미합니까? – ahoura

+0

BC Math 함수를 사용하여 for 루프 구현을 수행 할 수 있습니다. http://php.net/manual/en/book.bc.php – OCDev

+0

int에 너무 큽니다. 매뉴얼에서 :'PHP가 정수 타입의 범위를 벗어나는 숫자를 발견하면, 다음과 같이 해석됩니다. 대신에 float. 또한, 정수형의 경계를 넘는 숫자를 생성하는 연산은 대신 float를 반환합니다. '당신은 수레를 반복 할 수 있어야합니다. –

0

첫째.

그런 다음 올바른 데이터 구조를 찾아 데이터를 처리해야합니다. integer - 귀하의 경우 가능성이 높습니다 - gmp numbers.

그러면 코드를 작성할 수 있습니다. for 루프가 발표 된대로 작동하므로 $_GET에 대해 하드 코드하지 않는 것이 좋습니다.

+0

그래서 $ start = gmp_init ($ _ GET [ 'start']);와 같은 것을 사용하는 것이 좋습니다. $ end = gmp_init ($ _ GET [ 'end']); ($ i = $ start; $ i <$ end; $ i ++) {'? – ahoura

+0

비교 작업과 증가 작업은 gmp 함수를 사용하여 수행해야합니다. ['gmp_add'] (http://www.php.net/manual/en/function.gmp-add.php); ['gmp_cmp'] (http://www.php.net/manual/en/function.gmp-cmp.php). – hakre

0

먼저 코드에 $_GET['start']$_GET['end']을 직접 입력하지 마십시오.

대신 변수에 할당하고 숫자 및 범위에 있는지 확인하십시오. 예를 들어

: 끝이 등, 시작보다 작을 수 없습니다 ...

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

echo $i; 

} 

둘째, 대형 서버를 중단됩니다있는 번호입니다.

0

는 왜 작은 루프를 바르도록 시작과 끝 사이의 차이를 사용

<?php 

$min = 0; 
$max = $_GET['end'] - $_GET['start']; 
for($i = $min; $i < $max; $i++){ 
    echo $i + $_GET['start']; 
} 
+0

그게 작동하지 않습니다! – ahoura

+1

이 질문에 대한 정답입니다. 당신이 실제로 그것을 필요로하는 것을 우리가 말해주기를 거부하기 때문입니다. 그것은 당신의 예제에 대한 정확한 응답을 만들어 낸다. – duante

+0

이것이 작동하지 않습니다. 위 코드에서'100000000000000000000'을 시작으로 사용하고 '100000000000000001000'을 끝내면 작동하지 않습니다. – ahoura