坚持使用PHP中的数字模式打印

时间:2012-08-21 06:25:32

标签: php for-loop logic

坚持使用数字模式打印逻辑。让我知道我做错了什么,因为我的文件只是执行而没有给我一个模式。

我的代码 -

<?php

$num = 4;

for( $j=1 ; $j <= $num ; $j++ )
{
    for( $i=$j ; $i < $num-1 ; $i++ )
    {
    echo "&nbsp;";
    }

    for( $j ; $j >= 1 ; $j-- )
    {
    echo $j."&nbsp;";
    }

echo "<br />";
}

实现模式 -

   1
  21
 321
4321

更新

在应用新的更改后,屏幕截图---

On STAR USEAGE

ON BLANK USAGE

5 个答案:

答案 0 :(得分:5)

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 :(得分:2)

您的错误位于上一个for,由于您已经在循环播放,因此该错误不应该存在。

并创建一个新变量,用于保存下一个增量的打印文本。

<?php

$num = 4;
$wrap = '';

for( $j=1 ; $j <= $num ; $j++ )
{
    for( $i=$j ; $i < $num ; $i++ )
    {
        echo "&nbsp; ";
    }

    echo $wrap = $j.$wrap;
    echo "<br />";
}
?>

答案 2 :(得分:2)

根本原因是浏览器不会只渲染第一个空格,你可以通过使用非空格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('&nbsp; ',$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>';
?>

答案 3 :(得分:1)

就像现在一样,问题在于你的第三个(或第二个嵌套的)for循环。

您不能在此处重复使用$j作为计数器,因为$j仍然在包含for循环中被主动使用。用以下代码替换for循环:

for( $k = $j ; $k >= 1 ; $k-- )
{
    echo $k."&nbsp;";
}

答案 4 :(得分:1)

以下是您的计划的代码,您可以转到Develepor hell了解更多此类模式

//外部寻找换行

for($ i = 1; $ i&lt; = 5; $ i ++){

// Loop added for spacing
for ($s = $i; $s<=10-$i; $s++) {
    echo "&nbsp;";
    }

// Inner loop for printing required pattern
for ($j = $i; $j>=1; $j--) {
    echo $j;
}

echo '</br>';

}