2

数字パターンの印刷ロジックにこだわる。私のファイルがパターンを与えずに実行されているだけなので、私が間違っていることを教えてください。

マイコード --

<?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

アップデート

新しい変更を適用した後のスクリーンショットは次のとおりです ---

スターユースについて

空白の使用について

4

7 に答える 7

6
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>';
于 2012-08-21T06:29:34.743 に答える
2

根本的な理由は、ブラウザーが複数のスペースを最初のスペースのみレンダリングしないためです。これ&nbspは、スペースの代わりに改行しないスペース html エンティティを使用することで解決できます。

すっごく、実際のパターンを次のようにしたい場合:

   1
  21
 321
4321

そして好きではない:

1
21
321
4321

使用(編集: 1 だけではchar vsの幅が補正されないように見えるため、&nbsp実際に使用します)&nbsp;[space]14

<?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>';
?>
于 2012-08-21T06:49:56.913 に答える
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 />";
}
?>
于 2012-08-21T06:33:21.007 に答える
1

現在のところ、問題は 3 番目 (または 2 番目のネストされた)forループにあります。

は、包括的な for ループでまだ積極的に使用されている$jため、ここでカウンターとして再利用することはできません。$jfor ループを次のように置き換えます。

for( $k = $j ; $k >= 1 ; $k-- )
{
    echo $k."&nbsp;";
}
于 2012-08-21T06:33:54.097 に答える
1

これがあなたのプログラムのコードです。そのようなパターンについては、開発者の地獄に行くことができます

// 行変更の外側のルック

for ($i = 1; $i<=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>';

}

于 2014-01-25T16:22:41.910 に答える