坚持使用 PHP 中的数字模式打印
Posted
技术标签:
【中文标题】坚持使用 PHP 中的数字模式打印【英文标题】:Stuck with the number pattern printing in PHP 【发布时间】:2012-08-16 11:25:02 【问题描述】:卡在数字模式打印逻辑上。让我知道我做错了什么,因为我的文件只是继续执行而没有给我一个模式。
我的代码--
<?php
$num = 4;
for( $j=1 ; $j <= $num ; $j++ )
for( $i=$j ; $i < $num-1 ; $i++ )
echo " ";
for( $j ; $j >= 1 ; $j-- )
echo $j." ";
echo "<br />";
要实现的模式--
1
21
321
4321
更新
应用新更改后,以下是屏幕截图 ---
【问题讨论】:
请指定我在我的代码中出现的逻辑错误 【参考方案1】:for ($i = 1; $i <= 4; $i++)
echo str_pad(implode('', range($i, 1)), 4, ' ', STR_PAD_LEFT) . '<br />';
使用 CSS 右对齐
echo '<div style="text-align:right;">';
for ($i = 1; $i <= 4; $i++)
echo implode('', range($i, 1)) . '<br />';
echo '</div>';
【讨论】:
+1 for str_pad 方法,你能告诉我上面的代码有什么问题吗..帮助我建立我的逻辑:) 我猜这是因为您使用$j
进行外部和第二个内部循环。
我不认为会导致他的期望。
@MihaiIorga 你是对的,它没有按正确的顺序打印检查我更新的帖子
@swapnesh 它们放置正确,但我猜你在浏览器中执行它?根据这有什么好处,我推荐text-align
-css-property,但你也可以str_replace(' ', '$nbsp;', $string)
(如果你愿意,但对齐不是固定长度空格的用途)。【参考方案2】:
你的错误在最后一个for
,因为你已经在循环,所以不应该存在。
并创建一个新变量,它将保存下一个增量的打印文本。
<?php
$num = 4;
$wrap = '';
for( $j=1 ; $j <= $num ; $j++ )
for( $i=$j ; $i < $num ; $i++ )
echo " ";
echo $wrap = $j.$wrap;
echo "<br />";
?>
【讨论】:
@MihaiLorga 请检查我更新后的截图和截图..空格放置不正确 - @MihaiLorga 真棒它的工作..但如何大声笑???空格到底有什么问题??? NBSP 代表No-break space.
,&nbsp;
+ (space)
是关键
@Mihailorga 感谢您提供的所有信息 ..really g8 :)【参考方案3】:
根本原因是浏览器不会只渲染第一个空格,您可以通过使用不间断空格 html 实体 &nbsp
代替空格来克服这个问题。
Soooo,如果您希望您的实际模式看起来像:
1
21
321
4321
而不喜欢:
1
21
321
4321
使用&nbsp
(编辑:实际上使用&nbsp;[space]
,因为只有1 似乎无法补偿1
字符与4
的宽度)
<?php
$num = 4;
$result = array();
foreach(range($num,1) as $i)
$result[] = str_repeat(' ',$num-$i).implode('',range($i,1)).'<br />';
echo implode('',array_reverse($result));
?>
或者您可以使用<pre>
标签,例如:
<?php
$num = 4;
$result = array();
foreach(range($num,1) as $i)
$result[] = str_repeat(' ',$num-$i).implode('',range($i,1)).PHP_EOL;
echo '<pre>'.implode('',array_reverse($result)).'</pre>';
?>
【讨论】:
哇 .. 你居然在你的 HTML 应用程序中添加了<pre>
标签?
@LawrenceCherone..它的工作原理是空格的问题???
应该是str_repeat('&nbsp; ',$num-$i)
,带有空格。你没有回答他的问题。 Kindly specify the logical error im doing in my code
【参考方案4】:
就目前而言,问题在于您的第三个(或第二个嵌套)for
循环。
您不能在这里只重用$j
作为计数器,因为$j
仍然在包含for 循环中被积极使用。将 for 循环替换为:
for( $k = $j ; $k >= 1 ; $k-- )
echo $k." ";
【讨论】:
请检查我更新后的帖子截图..空格放置不正确【参考方案5】:这是你的程序的代码,你可以去Develepor hell了解更多这样的模式
// 外寻找换行
对于 ($i = 1; $i
// Loop added for spacing
for ($s = $i; $s<=10-$i; $s++)
echo " ";
// Inner loop for printing required pattern
for ($j = $i; $j>=1; $j--)
echo $j;
echo '</br>';
【讨论】:
【参考方案6】:// Here is the code for your program,
// Pattern - 1
$num = 4;
// to print no. of rows
for( $i=1 ; $i <= $num ; $i++ )
// To print white space
for( $j=1 ; $j <= $num-$i ; $j++ )
echo "0";
// To print pattern
for( $z= $i ; $z>=1 ; $z-- )
echo $z;
// To print new line
echo "<br />";
==>> Output
0001
0021
0321
4321
//===================================================================//
Pattern - 2
$z=1;
$n=3;
# no of rows
for($i=1;$i<=$n;$i++)
# to check even or odd
if($i%2 == 0)
# main logic to display in reverse order // right to left
$z = ($z+$n) -1;
$a = $z;
for($j=1;$j<=$n;$j++)
echo $z--;
$z = $a+1;
else
# display data left to right
for($j=1;$j<=$n;$j++)
echo $z++;
echo "<br/>";
==>> Output
123
654
789
【讨论】:
代码太多了!有没有机会加一段来解释这段代码?【参考方案7】:您的问题似乎是您将输出打印到 HTML 文档中,该文档将多个空格作为其默认行为。请参阅“Why does HTML require that multiple spaces show up as a single space in the browser?”要在打印时“保留”空格,请使用 <pre>
标记。
我将添加一个基于数学的解决方案,而不是多个迭代函数调用和多个循环(受my explained answer here 启发)。一旦你的数量限制高于 9,我不知道我的输出是否会与你想要的输出一致。
实际上,我使用printf()
将每一行用空格填充到相同的最大长度。每个连续的数字都会打印与其值一样多次的整数。
代码:(Demo)
$num = 4;
echo "<pre>";
for ($i = 1; $i <= $num; ++$i)
printf("% $numd<br>", (10 ** $i - 1) / 9 * $i);
HTML 输出(点击演示链接中的眼睛图标切换到 HTML 模式):
1
22
333
4444
为了比较,这些也可以在 for()
循环内工作(并提供高于 9 的更直观的结果):
printf("% $numd<br>", str_repeat($i, $i));
或者
echo str_repeat(' ', $num - $i) . str_repeat($i, $i) . "<br>";
【讨论】:
以上是关于坚持使用 PHP 中的数字模式打印的主要内容,如果未能解决你的问题,请参考以下文章