PHP码计数额外数字

PHP Code Counting Extra Digit

提问人:Yusuf M 提问时间:4/23/2018 更新时间:4/23/2018 访问量:68

问:

我在PHP中键入了以下代码,以从名为“sample.txt”的外部文本文件中读取文本“yusuf123”,并计算和打印总位数。令人惊讶的是,代码是 4 位数字而不是 3 位数字。

$file = fopen("sample.txt", "r");
$count = 0 ;
while(!feof($file))
{
  $ch = fgetc($file);
  if($ch >= '0' && $ch <= '9')
   $count++;
}
echo $count ;
fclose($file);

?>

上述代码的输出是 4 而不是 3。 请帮我解决这个问题。提前致谢

PHP 的 feof

评论

1赞 KIKO Software 4/23/2018
为什么不尝试这个函数而不是?请参见:php.net/manual/en/function.is-numeric.phpis_numeric($ch)($ch >= '0') && ($ch <= '9')
1赞 GordonM 4/23/2018
EOF 可能被计为 0。你可能想查看PHP关于类型杂耍主题的手册
0赞 Yusuf M 4/23/2018
谢谢你的回答。我必须按照他们的教学大纲教学生,而is_numeric()不存在。还有其他方法吗?
0赞 symcbean 4/23/2018
如果你添加了它可能会给你一些线索。print (integer)$offset++ . " " . ord($ch) . "\n";

答:

1赞 Andreas 4/23/2018 #1

您可以使用 file_get_contents 并将整个文件作为一个字符串读取,并使用 preg_match_all 获取所有数字。

//$str = file_get_contents("sample.txt");
$str = "yusuf123";

preg_match_all("/\d/", $str, $digits);
echo count($digits[0]); // 3

https://3v4l.org/tnaX1

不确定它是否会解决您的问题,因为我无法测试您拥有的文件,但它可以在这里工作。
因为它是一个具有匹配数字的数组。
$digits[0]

0赞 Yusuf M 4/23/2018 #2

感谢您的及时帮助。我找到了答案。我发现当达到 EOF 时,该变量会保留最后一个值,并且会计数两次。这就是我所做的,我找到了答案。

<?php
$file = fopen("sample.txt", "r");
$count = 0 ;
 $ch = fgetc($file);
while(!feof($file))
{ 
  if($ch >= '0' && $ch <= '9')
   $count++;  
$ch = fgetc($file);
}
 echo $count. " ". $ch. "<br>";
fclose($file);
?>