在文本文件中,我有一个这样的文件:
Olivia
7
Sophia
8
Abigail
9
Elizabeth
10
Chloe
11
Samantha
12
我想打印出所有名称而忽略这些数字。
出于某种原因,它不起作用 - 它不会打印任何东西?
<?php
$file_handle = fopen("names.txt", "rb");
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle);
if (!is_numeric((int)$line_of_text)) {
echo $line_of_text;
echo "<br />";
}
}
fclose($file_handle);
?>
答案 0 :(得分:6)
您使用(int)
投射每一行。因此,即使是字符串的行也会变为0
(零)。
您可以将代码更改为:
!is_numeric($line_of_text)
注意: is_numeric()也会返回true
小数和科学记数法。如果您严格确定该行是否包含数字,我建议ctype_digit()
您还需要trim($line_of_text)
,因为fgets()包含换行符。
while()
内的代码:
$line_of_text = trim(fgets($file_handle));
if (!ctype_digit($line_of_text)) {
echo $line_of_text;
echo "<br />";
}
答案 1 :(得分:5)
!is_numeric((int)$line_of_text)
考虑一下:你将这条线投射到int
,所以无论以前是什么,它都会成为一个数字。然后你要测试它是否不是数字。当然它是数字的,因为你做到了。因此,条件总是错误的。
在测试int
之前停止投射到is_numeric
。