ZetCode

PHP fscanf 函数

最后修改于 2025 年 4 月 3 日

PHP fscanf 函数从文件中读取格式化输入。它类似于 scanf,但使用文件资源而不是标准输入。

基本定义

fscanf 函数根据格式解析文件中的输入。它需要一个文件句柄和格式字符串作为必需参数。

语法:fscanf(resource $handle, string $format, mixed &...$vars): mixed。该函数返回已分配值的数量,如果失败则返回 false。

基本的 fscanf 示例

这展示了使用 fscanf 读取单个值的最简单用法。

basic_fscanf.php
<?php

declare(strict_types=1);

$file = fopen("data.txt", "r");
if ($file === false) {
    die("Error opening file");
}

$count = fscanf($file, "%d");
fclose($file);

echo "Read value: " . $count[0];

这从 "data.txt" 中读取一个整数。格式说明符 "%d" 匹配一个十进制整数。结果以数组形式返回。

读取多个值

fscanf 可以使用格式字符串一次读取多个值。

multi_value.php
<?php

declare(strict_types=1);

$file = fopen("user.txt", "r");
if ($file === false) {
    die("Error opening file");
}

$result = fscanf($file, "%s %d %f");
fclose($file);

[$name, $age, $score] = $result;

echo "Name: $name, Age: $age, Score: $score";

这从文件中读取一个字符串、一个整数和一个浮点数。使用数组解构将值分配给变量,以便代码更清晰。

使用变量引用

fscanf 可以分配给变量,而不是返回数组。

variable_references.php
<?php

declare(strict_types=1);

$file = fopen("product.txt", "r");
if ($file === false) {
    die("Error opening file");
}

$id = 0;
$name = "";
$price = 0.0;

$count = fscanf($file, "%d %s %f", $id, $name, $price);
fclose($file);

echo "Read $count values: ID $id, $name, \$$price";

在这里,我们通过引用传递变量,以直接接收解析后的值。该函数返回成功分配值的计数。

复杂的格式字符串

fscanf 支持带有文字字符的复杂格式字符串。

complex_format.php
<?php

declare(strict_types=1);

$file = fopen("log.txt", "r");
if ($file === false) {
    die("Error opening file");
}

$date = "";
$time = "";
$message = "";

fscanf($file, "[%10s %8s] %[^\n]", $date, $time, $message);
fclose($file);

echo "On $date at $time: $message";

这解析具有特定格式的日志文件条目。"%[^\n]" 说明符匹配所有字符,直到换行符。文字括号是格式的一部分。

读取到 EOF

我们可以在循环中使用 fscanf 来处理文件中的所有数据。

read_until_eof.php
<?php

declare(strict_types=1);

$file = fopen("numbers.txt", "r");
if ($file === false) {
    die("Error opening file");
}

$sum = 0;
while (fscanf($file, "%d", $number) === 1) {
    $sum += $number;
}
fclose($file);

echo "Sum of numbers: $sum";

这从文件中读取整数,直到 EOF。只要 fscanf 成功读取每行一个值,循环就会继续。

最佳实践

来源

PHP fscanf 文档

本教程涵盖了 PHP fscanf 函数,并提供了实际示例,展示了它在格式化文件输入中的用法。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 文件系统函数