PHP从终端读取指定格式输入的代码逻辑咨询
PHP从终端直接读取指定格式输入的实现逻辑
嘿,作为PHP新手,直接从终端读取指定格式的输入完全可行!我来一步步给你拆解逻辑,再附上能直接跑的代码示例~
先搞懂PHP读取终端输入的基础
PHP内置了STDIN这个标准输入流,配合fgets()函数就能读取终端里的每一行输入。trim()函数是用来去掉输入内容里的换行符、首尾空格的,避免后续处理出问题。
对应你的输入规则的读取步骤
你的输入规则是:
第一行是测试用例数T;每个测试用例的第一行是两个数组的大小n,第二、三行分别是两个包含n个空格分隔整数的数组
那我们的代码逻辑就要对应这个规则来走:
- 读取测试用例数T:先读第一行,把字符串转成整数。
- 循环处理每个测试用例:
- 先读当前测试用例的数组大小n,同样转成整数。
- 读第二行,按空格分割成数组,再转成整数类型(因为读取到的都是字符串)。
- 读第三行,重复上面的数组处理逻辑。
- 之后就可以对这两个数组做你需要的业务处理了。
完整代码示例(带注释)
<?php // 读取测试用例数T:trim去掉换行/空格,intval转成整数 $testCaseCount = intval(trim(fgets(STDIN))); // 循环处理每个测试用例 for ($i = 0; $i < $testCaseCount; $i++) { // 读取当前测试用例的数组大小n $arraySize = intval(trim(fgets(STDIN))); // 读取第一个数组的行:按空格分割→过滤空元素(处理连续空格)→转成整数数组 $firstArray = array_map('intval', array_filter(explode(' ', trim(fgets(STDIN))))); // 可选校验:确保数组元素数量符合n的要求 if (count($firstArray) !== $arraySize) { echo "⚠️ 第".($i+1)."个测试用例的第一个数组元素数量不对\n"; continue; } // 读取第二个数组,逻辑和第一个一致 $secondArray = array_map('intval', array_filter(explode(' ', trim(fgets(STDIN))))); if (count($secondArray) !== $arraySize) { echo "⚠️ 第".($i+1)."个测试用例的第二个数组元素数量不对\n"; continue; } // 这里替换成你自己的业务逻辑,比如打印验证读取结果 echo "✅ 测试用例 ".($i+1)."读取完成:\n"; echo "数组1:".implode(', ', $firstArray)."\n"; echo "数组2:".implode(', ', $secondArray)."\n\n"; } ?>
代码关键点解释
fgets(STDIN):每次读取终端的一行输入,包括末尾的换行符,所以必须用trim()清理掉。array_filter(explode(' ', ...)):处理输入里可能出现的连续空格或者首尾空格,避免分割出空字符串元素。array_map('intval', ...):把分割出来的字符串元素全部转成整数,方便后续数值计算。
怎么测试?
- 把上面的代码保存成
read_input.php文件。 - 在终端里运行
php read_input.php。 - 按照规则输入你的数据(比如你给的那串数据要拆成下面的格式输入):
3 5 1 4 0 2 5 2 0 5 1 4 4 1 1 7 2 1 13 2 1 3 3 1 7 2 5 4
- 回车后就能看到脚本输出的读取结果啦~
内容的提问来源于stack exchange,提问作者Gousia
相关产品推荐
相关产品推荐

