我只是 PHP 的初学者。我正在尝试编写程序来打印如下数字。
1 1
12 21
123 321
1234 4321
1234554321
我写了以下代码。
<?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
我该怎么做?
好的。你写的东西挺好的。为了实现您想要的效果,需要进行一些更改。第一个问题是您将其渲染为 HTML - 而 HTML 不渲染空格(我们需要)。有两种解决方案:使用
来表示空间,并确保使用比例字体,或者将所有内容包装到 <pre>
标签中以实现几乎相同的效果。所以,开始时 echo "<pre>";
,结束时 echo "</pre>";
。
下一步 - 不要让内循环转到
$i
。每次都让它变成 5,如果 $j <= $i
则打印一个数字,否则打印一个空格。
然后,在这个循环旁边,做另一个循环,但相反(从 5 开始,以 1 结束),但做同样的事情。
中提琴是一种乐器。
更通用的解决方案:
<?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);
}
这是我对您问题的解决方案。
这不是最好的解决方案,因为它没有考虑到您可能使用大于 9 的数字,在这种情况下,它会使数字彼此不一致。
但重点是,它仍然是解决方案的开始,您可以根据需要进行研究。
您可以使用
array
来存储要打印的数字。
因为数字位于 array
中,这意味着我们可以使用 foreach
循环来确保打印所有数字。
您可以使用 PHP 的
str_repeat()
函数来计算每个数字字符串之间需要放置多少个空格。
仅当您使用具有默认数字索引的数组而不是关联数组时,以下解决方案才有效。
这是因为它在 $key
函数的部分计算中使用了 str_repeat()
变量。
如果您不想使用 $key
变量,那么您应该能够弄清楚如何更改它。
当需要反转数字时,它们已经存储在字符串中,因此您可以使用 PHP 的
strrev()
函数来处理并将它们存储在另一个变量中。
最后,您只需在文档中打印一行,并在末尾换行即可。
请注意,
str_repeat()
函数正在重复
HTML实体。
这是因为浏览器只会将普通空白压缩为 1 个字符。
另请注意,我添加了一个
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 />';
}
$n = 5;
for ($i = 1; $i <= $n; $i++) {
$counter .= $i;
$spaces = str_repeat(" ", ($n-$i)*2);
echo $counter . $spaces . strrev($counter) . "<br/>";
}
<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>