2011-03-27 61 views
1

我進入一個無限循環,我希望你能幫助我理解爲什麼!簡單的php無限while循環問題

我的代碼:

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

$numbers是一個字符串,我基本上是試圖與字符串的每個字符比較「|」

現在這個工程:

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

而且我傳遞asd|asd所以應該打破的時候才發現了「|」但它沒有!

它有什麼不對?

是否有任何其他方式將字符串拆分爲數組?

預先感謝邁克 -

+3

有你爲什麼不使用類似PHP的爆炸功能的原因是什麼? – GWW 2011-03-27 06:28:19

+0

@GWW是啊,不知道這樣的功能存在:)我現在就試試吧! – mixkat 2011-03-27 06:30:22

+2

或者,如果您正在搜索'|'的第一個案例,使用[strpos](http://php.net/manual/en/function.strrpos.php) – 2011-03-27 06:30:27

回答

1

我懷疑,當你增加(我++),你就是在創建索引關閉的$號結束,PHP是延長你$數字,大概有空白或空字符。你可能還需要檢查我是不是大於$數目的當前大小來停止循環。

考慮在您的循環中放入echo $ numbers {i}以查看發生了什麼。

+0

感謝您的回覆,但爆炸功能工作正常,所以.. – mixkat 2011-03-27 06:45:32

+2

@mixkat:您明確地問過你的循環出了什麼問題。 – 2011-03-27 06:54:38

+0

這是真的!我應該以不同的方式表達這個問題。 – mixkat 2011-03-27 16:35:05

2

我無法解釋爲什麼在這個問題導致的代碼在一個無限循環,但這裏有幾個選擇...

使用explode()到使用|將原始字符串切成片段作爲分隔符然後從結果數組訪問第一部分:

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

或者,使用strpos()找到第一的位置|然後用substr之前提取字符:

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