2014-09-22 61 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

相关问题