我需要帮助进行循环

时间:2014-12-01 15:58:05

标签: php for-loop custom-controls

大家好,我实际上是在为php创建一个代码。

我想用循环来获得什么。事情将是这样的。

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

我现在要创建这个东西,我有这个代码。

<?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 .....所以请帮助我,我错了,谢谢你的帮助..

7 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

<?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>";
}
?>

答案 2 :(得分:0)

只是为了好玩。试试这个:

$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++;
    }
}

答案 3 :(得分:0)

只需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;
}

答案 4 :(得分:0)

 <?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>";
    };   

?>

答案 5 :(得分:0)

使用单个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>,但这是编写我能想到的代码的最不循环的方法

live demo

答案 6 :(得分:0)

这是一次递归尝试:

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));