在 PHP 控制台中读取空格分隔的整数

Sun*_*mar 1 php

我正在用 php 编写一个控制台应用程序,用户将在其中输入一些整数值。

样本输入 - 21 5 2

为了读取这个值,我正在使用

fscanf(STDIN, "%d\n", $a);
fscanf(STDIN, "%d\n", $b);
fscanf(STDIN, "%d\n", $c);
Run Code Online (Sandbox Code Playgroud)

但该值仅在变量 a 上分配。如何读取相应变量中的所有变量。

注意:整数不能在不同的行中输入。

kal*_*ann 5

您可以使用fscanf(STDIN, "%d %d %d\n", $a, $b, $c);.

例子:

<?php
$stdin = fopen('php://stdin', 'r');

print_r("Your 3 numbers:\n");

fscanf($stdin, "%d %d %d\n", $a, $b, $c);

print_r(sprintf('$a : %d $b : %d $c : %d' . "\n", $a, $b, $c));
Run Code Online (Sandbox Code Playgroud)

如果您需要有关格式字符串的更多信息,您可能需要查看sprintfphp 文档

如果您想解析的不仅仅是几个数字甚至是可变数量,您只能将两个参数传递给fscanf. 然后fscanf返回一个包含所有解析值的数组。

<?php
$stdin = fopen('php://stdin', 'r');

print_r("How many numbers do you want to enter? :  ");
fscanf($stdin, "%d\n", $n);    

print_r("Your ". $n . " numbers:\n");

$result = fscanf($stdin, str_repeat("%d ", $n). "\n");

print_r("I have parsed " . implode($result, ", ") . "\n");
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

How many numbers do you want to enter? :  10
Your 10 numbers:
1 1 2 3 5 8 13 21 34 55
I have parsed 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
Run Code Online (Sandbox Code Playgroud)