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"; } ?>
代码解释:
fopen("php://stdin", "r"):打开PHP的标准输入流,这样才能读取用户从控制台输入的内容;fscanf($handle, "%d", $n):从输入流里读取一个整数,存入变量$n(代表二维数组的行数),同理读取$m(列数);- 初始化空数组
$a,然后外层循环每一行时,先给$a[$i]赋值为空数组,确保后续可以给$a[$i][$j]赋值; - 内层循环读取每一行的每个整数,存入对应位置;
- 最后用
foreach循环遍历数组,用implode把每行的元素拼接成字符串打印出来,方便验证结果。
测试方式:
运行代码后,按顺序输入:
2 3 1 2 3 4 5 6
(或者每行输入一个数也可以,fscanf会自动跳过空白字符)
就会输出:
输入的二维数组: 1 2 3 4 5 6
内容的提问来源于stack exchange,提问作者Laxmikant Kharangate
相关产品推荐
相关产品推荐

