#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
.