2014-12-01 2 views
0

안녕하세요 여러분, 실제로 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>"; 
      } 
     } 
    }; 

?> 

다음

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

하지만과의 작업을 잘 내가 먼저 반대 루프를 필요로 사 후 3 다음이 다음 1 ..... 그래서 난 당신의 도움에 대한 잘못된 덕분에 나는 좀 도와주세요 ..

+0

이 질문은 분 당 질문입니다. 이 사이트에서 5 번! D – Rizier123

+0

힌트 :'$ c -' – RichardBernards

+0

'$ i'가 제대로 초기화되지 않았습니다.'for ($ i = 0; $ i <$ end; ++ $ i)'는 이 루프를 작성하는 일반적인 방법. 내부 루프는'str_repeat ('*', $ i + 1);을 사용하여 쉽게 도랑으로 배열 될 수 있습니다. 배열에 할당 한 다음 출력하고 역순으로 출력하면 ... 여기에 문법 오류가있다 :'$ d = i;', 통지를 주어야한다 (정의되지 않은 상수, 'i'로 가정) –

답변

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; 

<br>PHP_EOL 교체를, 그러나 이것은 내가

생각할 수있는 코드를 작성하는 가장 깨어나 방법입니다

live demo

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(),

$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)); 
그냥 재미를 위해
+0

흠 .. str_repeat와 같은 것이 없다? –

+0

고마워요. 100 % 벌금 ... 그 위대한. – Hassan

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

OP가 원하는 것은 아니지만 좋은 포맷입니다! – Rizier123

0

array_reverse(). 한 for 루프, 더 많은 재미를 위해, 하나를

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

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

그리고 :이 시도

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

니스! '(테스트, 작동)'자신의 코드를 테스트했습니다! 와우 ... 정상적인 것 같지 않습니다. – Rizier123

+0

@ Rizier123 가끔은 개념을 설명하기 위해 의사 코드를 던집니다. –

0

이 만 2 루프에 대한 달성 할 수있다.

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

    if ($i === 5) 
     $offset = -1; 
} 
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>"; 
    }; 

?> 
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)); 
관련 문제