is_numeric не работает при чтении из текстового файла?

#php

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

Комментарии:

1. хм… вы всегда приводите значение int, поэтому оно всегда числовое и имеет значение true, поэтому ваше условие никогда не будет выполнено. Удалите (int). Может быть, вы хотите использовать регулярное выражение вместо этого.

Ответ №1:

Вы приводите каждую строку с помощью (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. Я удалил (int), он показывает все, включая число?

Ответ №2:

 !is_numeric((int)$line_of_text)
  

Подумайте об этом: вы преобразуете строку в int , поэтому, чем бы она ни была раньше, она станет числом. Затем вы проверяете, является ли это не числовым. Конечно, это будет числовое значение, потому что вы так сделали. Следовательно, условие всегда будет false.

Остановите приведение к int перед тестированием на is_numeric .