在php中发生的警告发生
问题描述:
我写了下面的代码来计算给定文件中字符串发生的次数。在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未定义,抵消了通知,但我的输出出来是正确的。你能帮我解决上述问题吗?
答
问题是您要删除数组$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
请让该代码更易读(清晰的变量名称,缩进)!并标出第17行和第24行并附上警告! – idmean 2014-09-22 17:25:58
什么是确切的警告?他们所指的是什么?为什么你不能使用一致的间距和有意义的变量名? – David 2014-09-22 17:26:42