从txt文件读取时is_numeric不起作用?

时间:2011-05-10 22:56:41

标签: php

在文本文件中,我有一个这样的文件:

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);
?>

2 个答案:

答案 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