簡體   English   中英

我需要幫助for循環

[英]I need help in for loop

大家好,我實際上是在為php創建代碼。

我想用for循環得到什么。 事情會是這樣的。

*
**
***
****
*****
****
***
**
*

我現在想創建的東西我有此代碼。

<?php

    $i = 1;
    $end = 5;
    $star = "*";

    for($i; $i <= $end; $i++){
        for($b=1; $b <= $i; $b++){
            echo $star;
        }


        if($i == $end){
            for($c=1; $c <= $end; $c++ ){
                for($d=i; $d >= 2; $d--){
                    echo $star;
                }
                echo "<br>";
            }   
        }   
    };

?>

並與

*
**
***
****
*****

但是然后我需要相反的循環首先4然后3然后2然后1 .....所以請在錯誤的地方幫助我,謝謝您的幫助..

可以使用嵌套的for循環。 例:

$n = 5;
for($i = 1; $i <= $n; $i++){
    for($j = 1; $j <= $i; $j++){
        echo '*';
    }
    echo '<br />';
}
for($i = $n-1; $i >= 1; $i--){
    for($j = $i; $j >= 1; $j--){
        echo '*';
    }
    echo '<br />';
}

另一種使用array_fill()array_map()array_reverse()

$n = 5; $arr = array();
for($i = 1; $i <= $n; $i++){
   $arr[] = array_fill(0, $i, '*');
}
array_map(function($v){echo join('', $v) . '</br>';},$arr);
unset($arr[count($arr) - 1]); //remove last index value
array_map(function($v){echo join('', $v) . '</br>';},array_reverse($arr));
<?php
for($i=0;$i<=6;$i++){
    for($k=6;$k>=$i;$k--){
        echo " &nbsp;";
    }
    for($j=1;$j<=$i;$j++){
        echo "* &nbsp;";
    }
    echo "<br>";
}
for($i=5;$i>=1;$i--){
    for($k=6;$k>=$i;$k--){
        echo " &nbsp;";
    }
    for($j=1;$j<=$i;$j++){
        echo "* &nbsp;";
    }
    echo "<br>";
}
?>

純娛樂。 嘗試這個:

$stars = 1;
for ($i = 0; $i < 9; $i++) {
    for ($s = 1; $s <= $stars; $s++) {
       echo "*";
    }
    echo "\n";

    $stars += ($i<4)?1:-1;   
}

而且,為了獲得更多樂趣,其中一個僅包含一個for循環:

$stars = 0;
$starctr = 0;
for ($i = 0; $i < 25; $i++) {
    echo "*";

    if ($stars == $starctr) {
      echo "\n";

      $stars += ($i<14)?1:-1;
      $starctr = 0;
    } else {
      $starctr++;
    }
}

只需2個for循環即可實現。

$offset = 1;
for ($i = 1; $i > 0; $i += $offset)
{
    for($j = 1; $j <= $i; $j++){
        echo '*';
    }
    echo '<br />';

    if ($i === 5)
        $offset = -1;
}
 <?php

    $i = 1;
    $end = 5;
    $star = "*";

    for($i; $i <= $end; $i++){
       for($b=1; $b <= $i; $b++){
         echo $star;
       }

    };
    for($c=$send; $c>=2; $c-- ){
       for($d=$end; $d >= 2; $d--){
         echo $star;
       }
       echo "<br>";
    };   

?>

使用單個for循環:

$end = 5;
$out = array();

for ($i=0;$i<$end;++$i)
{
    $out[] = str_repeat('*', $i+1);
}
echo implode(PHP_EOL, $out).PHP_EOL;
array_pop($out);
$out = array_reverse($out);//remove last ****** <-- only one line with 5 stars
echo implode(PHP_EOL, $out).PHP_EOL;

如果願意,可以將PHP_EOL替換為<br> ,但這是我可以想到的編寫此代碼的最少循環方式

現場演示

這是遞歸嘗試:

function ladder($n, $counter=1, &$acc=array())
{
    if ($counter == ($n*2)) {
        return implode($acc);    
    }   

    if ($counter <= $n) {
        $acc[$counter] = str_repeat('*', $counter) . "\n";
        $counter++;
    }   

    if ($counter > $n) {
        $diff = (int) $n-$counter;
        $acc[$counter] = str_repeat('*', $n+$diff) . "\n";
        $counter++;
    }   

    return ladder($n, $counter, $acc);
}

print_r(ladder(5));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM