我只是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
我该怎么做?
答案 0 :(得分:1)
最简单的硬编码版本:
<?php
$text = "1 1
12 21
123 321
1234 4321
1234554321";
echo $text;
?>
修改强>
更通用的解决方案:
<?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);
};
?>
答案 1 :(得分:1)
好。你写的很不错。需要进行一些更改才能完成您想要的操作。第一个问题是你将它渲染为HTML - 而HTML不会渲染空间(我们需要它)。两个解决方案:您使用
作为空间,并确保使用比例字体,或者将所有内容包装到<pre>
标记中以实现几乎相同的操作。因此,echo "<pre>";
一开始就是echo "</pre>";
。
下一步 - 没有内循环转到$i
。每次都转到5,如果$j <= $i
打印一个数字,否则打印一个数字。
然后,在这个循环的旁边,做另一个,但反向(从5开始,以1结尾),但做同样的事情。
Viola是一种乐器。
答案 2 :(得分:0)
以下是我解决问题的方法。
这不是最好的解决方案,因为它没有考虑到您可能使用的数字高于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 />';
}
答案 3 :(得分:0)
$n = 5;
for ($i = 1; $i <= $n; $i++) {
$counter .= $i;
$spaces = str_repeat(" ", ($n-$i)*2);
echo $counter . $spaces . strrev($counter) . "<br/>";
}
答案 4 :(得分:0)
<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>