我编写了以下代码来计算给定文件中字符串出现次数。
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行未定义偏移的通知。能否帮我纠正上述问题?
答案 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;
}
?>
总之,你应该做更多的测试。如果这个脚本的结果还可以,那就是偶然的。