PHP多维数组输出问题:如何让字符画兔子横向并排显示
问题根源与解决方法
为什么会纵向排列?
你之前的嵌套foreach逻辑是先遍历完第一只兔子的所有行,再遍历第二只兔子的所有行——相当于先把兔子A从上到下全输出,再输出兔子B,自然是上下叠放。哪怕去掉<br>,也只是把两只兔子的所有字符连在一起,顺序还是A的所有行接着B的所有行,根本达不到横向并排的效果。
解决思路:按行同步输出
要让兔子横向并排,核心是每一行同时输出两只兔子的对应行内容:先输出两只兔子的第一行,换行后再输出第二行,以此类推,把每一行的两只兔子内容横向拼接后再换行。
具体代码实现
假设你的$bunnys数组结构是这样的(每一个子数组对应一只兔子的所有行):
$bunnys = [ // 兔子1的每一行 [ " (\__/)", " (oo)", " /------\\", " / \\", "| |", " \\ /", " \\------/" ], // 兔子2的每一行 [ " (\__/)", " (xx)", " /------\\", " / \\", "| |", " \\ /", " \\------/" ] ];
基础版本(两只兔子行数相同)
// 获取兔子的总行数(假设两只行数一致) $totalRows = count($bunnys[0]); // 按行索引循环 for ($i = 0; $i < $totalRows; $i++) { // 遍历每只兔子,输出当前行的内容,中间用空格分隔 foreach ($bunnys as $bunny) { echo $bunny[$i] . " "; } // 每行结束后换行 echo "<br>"; }
兼容版本(兔子行数不同时自动补空格对齐)
如果两只兔子的行数不一样,需要给短的那只补空格避免错位:
// 先找出所有兔子中的最大行数 $maxRows = max(array_map('count', $bunnys)); // 取第一只兔子的最长行宽作为补空格的基准 $maxLineWidth = max(array_map('strlen', $bunnys[0])); for ($i = 0; $i < $maxRows; $i++) { foreach ($bunnys as $bunny) { // 如果当前兔子没有第i行,输出对应宽度的空格;否则输出原行 $currentLine = isset($bunny[$i]) ? $bunny[$i] : str_repeat(' ', $maxLineWidth); echo $currentLine . " "; } echo "<br>"; }
效果说明
这样输出后,两只兔子会横向并排显示,每一行都是两只兔子的对应行内容横向拼接后再换行,完全符合你的需求。
内容的提问来源于stack exchange,提问作者ervee
相关产品推荐
相关产品推荐

