2014-09-22 55 views
-2

我寫了下面的代碼來計算給定文件中字符串發生的次數。在php中發生的警告發生

PHP

<?php 
$p = fopen("g.txt", "r"); 
$q = fread($p, filesize("g.txt")); 
$t = explode(" ", $q); 
$m = explode(" ", $q); 
$i = 0; 
$j = 0; 
$r = 0; 
$count = 0; 
$c = count($t); 
$d = array(); 
echo "count of". 
"<br/>"; 
for ($i = 0; $i < $c; $i++) { 
    for ($j = $i; $j < $c; $j++) { 
    if ($t[$i] == $t[$j]) { 
     $count = $count + 1; 
    } 
    } 
    for ($r = $i + 1; $r < $c; $r++) { 
    if ($t[$i] == $t[$r]) 
     unset($t[$r]); 
    } 
    echo $t[$i]. 
    "=".$count. 
    "<br/>"; 
    $count = 0; 
} 
?> 

我得到的行號17和24未定義,抵消了通知,但我的輸出出來是正確的。你能幫我解決上述問題嗎?

+2

請讓該代碼更易讀(清晰的變量名稱,縮進)!並標出第17行和第24行並附上警告! – idmean 2014-09-22 17:25:58

+1

什麼是確切的警告?他們所指的是什麼?爲什麼你不能使用一致的間距和有意義的變量名? – David 2014-09-22 17:26:42

回答

0

問題是您要刪除數組$t中的項目。您將計數保存在$c中,但實際計數會因上次內循環而改變。

即使您在全球各地用count($t)代替$c,它也會出錯,因爲最後一個循環應該是相反的順序,否則會跳過項目。例如,如果你有列表'a','b','c'。那麼當你刪除'b'並增加$r時,你根本不會檢查'c'。

因此,如果我解決了這些問題,您的代碼將變成如下所示。雖然我沒有真正檢查它的其他問題。坦率地說,我真的不知道該怎麼做。 ;-)

<?php 
     $p=fopen("g.txt","r"); 
     $q=fread($p,filesize("g.txt")); 
     $t=explode(" ",$q); 
     $m=explode(" ",$q); 
     $i=0; 
     $j=0; 
     $r=0; 
     $count=0; 
     $d=array(); 
     echo "count of"."<br/>"; 
     for($i=0; $i<count($t); $i++) 
     { 
     for($j=$i; $j<count($t); $j++) 
      { 
      if($t[$i]==$t[$j]) 
        { 
        $count=$count+1; 
        } 
      } 
     for($r=count($t) - 1; $r > $i; $r--) 
      { 
      if($t[$i]==$t[$r]) 
       unset($t[$r]); 
      } 
    echo $t[$i]."=".$count."<br/>"; 
    $count=0; 
    } 
    ?> 

總之,你應該做更多的測試。如果這個劇本的結果沒問題的話,那是偶然的。

+0

感謝您的解釋。我不明白爲什麼如果我們有'a','b','c'列表。那麼當我們刪除'b'並增加$ r時,我們根本不會檢查'c'? – 2014-09-22 18:05:22

相關問題