2011-03-27 9 views
1

무한 루프로 들어가서 왜 내가 그 이유를 이해하도록 도와 주길 바랬습니다!간단한 PHP 무한 루프 문제

내 코드 :

while($numbers{$i} != '|') 
{    
     $tempString = $tempString.$numbers{$i}; 
     $i++; 
} 

$numbers 문자열이고 나는 기본적으로 문자열의 각 문자를 비교하기 위해 노력하고 있어요 '|' "|"를

if($numbers{$i} != '|') 
{ 
    echo "bla"; 
} 

그리고 나는 그것을 발견했을 때 그래서 중단해야 asd|asd를 전달하고있다 :

지금이 작동 그러나 그것은 doesnt한다!

뭐가 잘못 되었나요?

문자열을 배열로 분할하는 다른 방법이 있습니까? 사전에

감사합니다 - 마이크

+3

있습니까? – GWW

+0

@GWW 그래, 그런 기능이 있다는 것을 몰랐다. :) 지금 시도해 볼게! – mixkat

+2

또는 '|'의 첫 번째 사례를 검색하는 경우 [strpos] (http://php.net/manual/en/function.strrpos.php) –

답변

0

당신은

는에 explode()를 사용하여 ... 여기에 무한 루프에 질문 결과에 코드 만이 대안의 몇 가지의 이유를 설명 할 수없는 PHP의 explode 기능 :

1

난 당신이 (내가 ++) 증가로, 당신은 $ 숫자의 끝을 색인하는 것으로 의심하고, PHP 아마 공백 또는 널 (null)로, 당신을 위해 $ 번호를 확장된다 캐릭터. 당신은 또한 내가 루프를 멈추게하기 위해 현재의 $ number 크기보다 크지 않은지 확인해야 할 것이다.

무슨 일이 일어나고 있는지 보려면 echo $ numbers {i}를 루프 안에 넣는 것을 고려하십시오.

+0

답장을 보내 주셔서 감사 합니다만 폭발 함수가 잘 작동합니다 .. – mixkat

+2

@mixkat : 루프에 무엇이 잘못 되었습니까? –

+0

그게 사실이야! 질문을 다르게 표현해야했습니다. – mixkat

2

를 사용한다 를 사용하여 원래 문자열을 조각으로 자른다 | 구분 기호는 다음 결과 배열에서 첫 번째 부분을 액세스 할 때 :

$bits = explode('|', $numbers); 
$tempString = $bits[0]; 

를 또는, 처음의 위치를 ​​찾기 위해 strpos()을 사용하여 | 다음 전에 문자를 추출 substr를 사용하면 PHP의 폭발 기능 같은 것을 사용하지 않을 이유가

$pos = strpos($numbers, '|'); 
$tempString = substr($numbers, 0, $pos-1);