PHP使用echo输出二维数组提示Uninitialized string offset报错如何解决
报错含义
Uninitialized string offset 2 表示你尝试访问字符串的第2位下标,但该字符串长度不够,不存在对应位置的字符。
问题出在数组取值语法
你定义的$ttt是二维数组,但你写的$ttt[0][1][2]是三维数组的取值写法,实际执行时会按以下逻辑解析:
- 第一层
$ttt[0]取到第一个子数组:['x', '', 'o'] - 第二层
$ttt[0][1]取到该子数组下标为1的元素,也就是空字符串'' - 第三层
[2]会让PHP把前面的空字符串当做字符序列尝试取下标2,空字符串没有对应位置,自然触发报错。
另外你代码里的$lang变量如果没有提前定义赋值,也会触发未定义变量的警告。
解决方法
单个元素取值
二维数组只需要写两层下标即可,下标从0开始计数,例如:
- 取第一行第三列的
o:echo $ttt[0][2]; - 取第二行第二列的
o:echo $ttt[1][1]; - 取第三行第一列的
x:echo $ttt[2][0];
输出完整井字棋棋盘
可以用双层循环遍历整个二维数组:
<?php $ttt = array( array('x', '', 'o'), array('o', 'o', ''), array('x', 'o', '') ); foreach ($ttt as $row) { foreach ($row as $cell) { // 空位置用下划线占位,你也可以换成其他字符 echo $cell ? $cell : '_'; } // 每行结束换行,网页输出用<br>,CLI输出用PHP_EOL echo "<br>"; } ?>
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

