我编写了以下代码来计算给定文件中出现的字符串数。
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行未定义偏移的通知,尽管我的输出是正确的。你能帮我纠正上面的问题吗?
问题是您正在从数组$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;
}
?>
总之,你应该做更多的测试。如果这个剧本的结果是好的,那么这是偶然的。