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

PHP新手求助:如何获取二维数组的用户输入?

解决PHP二维数组的用户输入问题

嘿,刚入门PHP遇到这种问题太正常了!我帮你把代码里的问题一一指出来,再给你一个能正常运行的版本,顺便解释下每一步为啥这么做。

原代码里的几个关键问题:

  • 你注释掉了打开标准输入的fopen语句,这会导致fscanf没法读取输入;
  • fscanf的用法不对:第一个参数必须是打开的文件句柄(这里就是$handle),而且要读取到变量里的话,变量需要以引用的形式传递(PHP 5.3及以后可以不用&,但写上更稳妥);
  • 二维数组的初始化错误:$a = array(n)(m); 这不是PHP创建数组的语法,正确的方式是先创建空数组,再在循环里逐步添加子数组;
  • 给二维数组元素赋值时,要先确保$a[$i]是一个数组,不然直接给$a[$i][$j]赋值会报错。

修正后的完整代码:

<?php
// 打开标准输入流
$handle = fopen("php://stdin", "r");

// 读取行数n和列数m
fscanf($handle, "%d", $n);
fscanf($handle, "%d", $m);

// 初始化二维数组
$a = [];
for ($i = 0; $i < $n; $i++) {
    // 先创建当前行的空数组
    $a[$i] = [];
    for ($j = 0; $j < $m; $j++) {
        // 读取当前位置的整数,存入数组
        fscanf($handle, "%d", $a[$i][$j]);
    }
}

// 关闭输入流
fclose($handle);

// 打印验证二维数组
echo "输入的二维数组:\n";
foreach ($a as $row) {
    echo implode(" ", $row) . "\n";
}
?>

代码解释:

  1. fopen("php://stdin", "r"):打开PHP的标准输入流,这样才能读取用户从控制台输入的内容;
  2. fscanf($handle, "%d", $n):从输入流里读取一个整数,存入变量$n(代表二维数组的行数),同理读取$m(列数);
  3. 初始化空数组$a,然后外层循环每一行时,先给$a[$i]赋值为空数组,确保后续可以给$a[$i][$j]赋值;
  4. 内层循环读取每一行的每个整数,存入对应位置;
  5. 最后用foreach循环遍历数组,用implode把每行的元素拼接成字符串打印出来,方便验证结果。

测试方式:

运行代码后,按顺序输入:

2
3
1 2 3
4 5 6

(或者每行输入一个数也可以,fscanf会自动跳过空白字符)

就会输出:

输入的二维数组:
1 2 3
4 5 6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:20:21