在php word出现时发生警告

时间:2014-09-22 17:24:12

标签: 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行未定义偏移的通知。能否帮我纠正上述问题?

1 个答案:

答案 0 :(得分:0)

问题是您要从数组$t中删除项目。您在$c中保存了计数,但实际计数会因您的上一个内循环而改变。

即使您将$c替换为count($t),也会出错,因为最后一个循环应该是相反的顺序,否则您会跳过项目。例如,如果您有列表&#39; a&#39;,&#39;&#39;&#39; c&#39;。那么当你删除&#39; b&#39;并增加$r,你不会检查&#39; c&#39;一点都不。

所以,如果我解决了这些问题,你的代码就会变成如下。虽然我没有真正检查其他问题。坦率地说,我并没有真正得到应该做的事情。 ; - )

<?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;
     }
     ?>

总之,你应该做更多的测试。如果这个脚本的结果还可以,那就是偶然的。