我只是PHP的初学者。我正在尝试写程序来打印数字如下。我写了下面的代码。
<?php $n=5; for($i=1; $i<=$n; $i++) { echo "<br />"; for($j=1; $j<=$i; $j++) { echo $j; } } ?>
结果显示如下。
1 12 123 1234 12345
我无法逆转
1 21 321 4321 54321
我该怎么做?
lsmd5eda1#
好吧。你写的很好。需要做一些改变才能做你想要的。第一个问题是您要将其呈现为HTML -而HTML不呈现空格(我们将需要空格)。两种解决方案:你可以使用 来表示空间,并确保使用比例字体,或者将所有内容 Package 到<pre>标签中以实现几乎相同的功能。所以,echo "<pre>";在开始,echo "</pre>";在结束。接下来-不要让内部循环转到$i。让它每次都变成5,如果$j <= $i,则打印一个数字,否则打印一个空格。然后,在这个循环的旁边,做另一个循环,但是反过来(从5开始,以1结束),但是做同样的事情。中提琴是一种乐器。
<pre>
echo "<pre>";
echo "</pre>";
$i
$j <= $i
6qftjkof2#
更通用的解决方案:
<?php $n = 5; $seq1 = ''; $seq2 = ''; $format1 = sprintf("%%-%su", $n); //right justified with spaces $format2 = sprintf("%%%su", $n); //left justified with spaces for($i=1; $i<=$n;$i++){ $seq1 .= $i; $seq2 = strrev($seq1); echo sprintf("$format1$format2\n", $seq1, $seq2); }
mnemlml83#
这是我对你的问题的解决方案。这不是最好的解决方案,因为它没有考虑到您可能使用大于9的数字,在这种情况下,它会使数字彼此不一致。但关键是,它仍然是一个解决方案的开始,如果需要,您可以继续工作。您可以使用array存储要打印的数字。因为数字是在array中,这意味着我们可以使用foreach循环来确保所有数字都被打印出来。您可以使用PHP的str_repeat()函数来计算每个数字字符串之间需要插入多少个空格。下面的解决方案将只工作,如果你使用一个数组与默认的数字indicies,而不是一个关联数组。这是因为它在str_repeat()函数的部分计算中使用了$key变量。如果你不想使用$key变量,那么你应该能够弄清楚如何改变它。当需要反转数字时,它们已经存储在字符串中,因此您可以使用PHP的strrev()函数来处理并将其存储在另一个变量中。最后,你只需要在文档中打印一行,并在末尾换行。请注意,str_repeat()函数重复 HTML实体。这是因为浏览器只会将正常白色压缩到1个字符。另外请注意,我已经包含了一个style块来将字体更改为monospace。这是为了确保所有数字都彼此对齐。
array
foreach
str_repeat()
$key
strrev()
style
monospace
<style> html, body { font: 1em monospace; } </style> <?php $numbers = array(1, 2, 3, 4, 5); $numbers_length = count($numbers); $print_numbers = ''; $print_numbers_rev = ''; foreach($numbers as $key => $value) { $spaces = str_repeat(' ', ($numbers_length - ($key + 1)) * 2); $print_numbers .= $value; $print_numbers_rev = strrev($print_numbers); echo $print_numbers . $spaces . $print_numbers_rev . '<br />'; }
编辑:
无阵列的解决方案:
<style> html, body { font: 1em monospace; } </style> <?php $numbers = 9; $numbers_length = $numbers + 1; $print_numbers = ''; $print_numbers_rev = ''; for($i = 0; $i <= $numbers; ++$i) { $spaces = str_repeat(' ', ($numbers_length - ($i + 1)) * 2); $print_numbers .= $i; $print_numbers_rev = strrev($print_numbers); echo $print_numbers . $spaces . $print_numbers_rev . '<br />'; }
8wigbo564#
$n = 5; for ($i = 1; $i <= $n; $i++) { $counter .= $i; $spaces = str_repeat(" ", ($n-$i)*2); echo $counter . $spaces . strrev($counter) . "<br/>"; }
i86rm4rw5#
<div style="position:relative;width:100px;height:auto;text-align:right;float:left;"> <?php $n=5; for($i=1; $i<=$n; $i++) { echo "<br />"; for($j=1; $j<=$i; $j++) { echo $j; } } ?> </div>
5条答案
按热度按时间lsmd5eda1#
好吧。你写的很好。需要做一些改变才能做你想要的。第一个问题是您要将其呈现为HTML -而HTML不呈现空格(我们将需要空格)。两种解决方案:你可以使用
来表示空间,并确保使用比例字体,或者将所有内容 Package 到<pre>
标签中以实现几乎相同的功能。所以,echo "<pre>";
在开始,echo "</pre>";
在结束。接下来-不要让内部循环转到
$i
。让它每次都变成5,如果$j <= $i
,则打印一个数字,否则打印一个空格。然后,在这个循环的旁边,做另一个循环,但是反过来(从5开始,以1结束),但是做同样的事情。
中提琴是一种乐器。
6qftjkof2#
更通用的解决方案:
mnemlml83#
这是我对你的问题的解决方案。
这不是最好的解决方案,因为它没有考虑到您可能使用大于9的数字,在这种情况下,它会使数字彼此不一致。
但关键是,它仍然是一个解决方案的开始,如果需要,您可以继续工作。
您可以使用
array
存储要打印的数字。因为数字是在array
中,这意味着我们可以使用foreach
循环来确保所有数字都被打印出来。您可以使用PHP的
str_repeat()
函数来计算每个数字字符串之间需要插入多少个空格。下面的解决方案将只工作,如果你使用一个数组与默认的数字indicies,而不是一个关联数组。这是因为它在str_repeat()
函数的部分计算中使用了$key
变量。如果你不想使用$key
变量,那么你应该能够弄清楚如何改变它。当需要反转数字时,它们已经存储在字符串中,因此您可以使用PHP的
strrev()
函数来处理并将其存储在另一个变量中。最后,你只需要在文档中打印一行,并在末尾换行。
请注意,
str_repeat()
函数重复
HTML实体。这是因为浏览器只会将正常白色压缩到1个字符。另外请注意,我已经包含了一个
style
块来将字体更改为monospace
。这是为了确保所有数字都彼此对齐。编辑:
无阵列的解决方案:
8wigbo564#
i86rm4rw5#