2011-08-18 81 views
0

這裏是我的代碼的一部分PHP:SUBSTR跑道環

$hold = $this->content; 
    $hold_table = array(); 
    for($i=0; $i<strlen($hold); $i++){ 
     $t = substr($hold, $i, 10); 
     $count = substr_count($hold, $t); 
     if($count > 1){ 
      $hold = str_replace($t, '', $hold); //Just iterating for now to get counts 
      $hold_table[bin2hex($t)] = $count; 
     } 
    } 

$this->content是在讀取文件

如果「10」在這一行:$t = substr($hold, $i, 10);是10或更低,它工作正常,並吐出結果很好。

如果我改變10來說「15」。該腳本只是掛在一個循環中。

我不覺得有什麼,我在運行任何數組密鑰大小限制和「FOR」如果$i > strlen($hold)

任何想法,爲什麼從10到15的原因混亂改變循環應該結束?

+0

我實際上可以推到14沒有問題 –

+0

你正在嘗試做**真的很奇怪。你循環字符串直到它結束,並且在每次迭代時嘗試從長度爲10的當前字符開始獲取子字符串。所以,我真的不明白爲什麼它是字。當'$ i'是'strlen($ hold)-1'時,你期望'substr'返回什麼?當然,它足夠聰明,不會崩潰,但仍然,這是相當奇怪的方法 – J0HN

+0

正確。但是如果字符串不止一次匹配,我就把它拉出來,這就是我離開計數器的原因。我想通過重複消除儘可能多的字符串。你是否暗示我通過在下一個循環之前檢查strlen來捕獲錯誤?當for循環應該捕獲它時,似乎沒有必要。 –

回答

1

您正在通過str_replace語句改變$ hold(基本上縮短它)。我認爲這產生了一些意想不到的結果。