You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP从终端读取指定格式输入的代码逻辑咨询

PHP从终端直接读取指定格式输入的实现逻辑

嘿,作为PHP新手,直接从终端读取指定格式的输入完全可行!我来一步步给你拆解逻辑,再附上能直接跑的代码示例~

先搞懂PHP读取终端输入的基础

PHP内置了STDIN这个标准输入流,配合fgets()函数就能读取终端里的每一行输入。trim()函数是用来去掉输入内容里的换行符、首尾空格的,避免后续处理出问题。

对应你的输入规则的读取步骤

你的输入规则是:

第一行是测试用例数T;每个测试用例的第一行是两个数组的大小n,第二、三行分别是两个包含n个空格分隔整数的数组

那我们的代码逻辑就要对应这个规则来走:

  1. 读取测试用例数T:先读第一行,把字符串转成整数。
  2. 循环处理每个测试用例:
    • 先读当前测试用例的数组大小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', ...):把分割出来的字符串元素全部转成整数,方便后续数值计算。

怎么测试?

  1. 把上面的代码保存成read_input.php文件。
  2. 在终端里运行php read_input.php。
  3. 按照规则输入你的数据(比如你给的那串数据要拆成下面的格式输入):
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
  1. 回车后就能看到脚本输出的读取结果啦~

内容的提问来源于stack exchange,提问作者Gousia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:27:00