• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP Rysowanie pętla for

Object Storage Arubacloud
0 głosów
999 wizyt
pytanie zadane 5 listopada 2018 w PHP przez Wietje Nowicjusz (120 p.)

mam coś takiego :

<?php 
$zmienna=-1;
$zmienna2=-2;
 
for($i=0;$i<=3;$i++) {
    $zmienna++;
    $zmienna2++; 
      
    for($j=0;$j<=$i;$j++) {
     
        if($i==3 && $j==0){
            echo '------';
        }elseif($j>=1 && $j<=$zmienna2 && $i==$zmienna){ 
            echo ' ';
        }else{ 
			echo '/';
        }
         
    }
    echo '<br />';
}

ma wyjść taki rysunek: 

 

  /\
 /  \
/    \
------

komentarz 5 listopada 2018 przez Misiek Mądrala (5,300 p.)
a jakie są założenia kodu ?

ten co masz trzeba go przerobić jakoś ?

wykorzystane pętle konieczne if czy co ?
komentarz 5 listopada 2018 przez Tnifey Pasjonat (24,190 p.)

@Wietje, czy wychodzi ci coś w tym stylu?

/\ 
/ \ 
/ \ 

------

zamiast tej choinki? html zamienia białe znaki na pojedynczy odstęp :) tutaj to ładnie wytłumaczył

https://medium.com/@patrickbrosset/when-does-white-space-matter-in-html-b90e8a7cdd33

a jak to naprawić to użyj <pre>

3 odpowiedzi

0 głosów
odpowiedź 5 listopada 2018 przez Tnifey Pasjonat (24,190 p.)
edycja 5 listopada 2018 przez Tnifey
<pre><?php

$segments = 4;

for ($i = 0; $i < $segments; $i++) {
    echo str_repeat("&nbsp;", $segments - $i) . "/" . str_repeat("&nbsp;", $i * 2) . "\\" . '<br>';
}

szybkie wytłumaczenie o co chodzi :)

założenie jest takie że rysujesz po kolei linie :) każda z nich składa się z odstępu, znaku /, odstęp numer dwa i następnie znak \ oraz przejście do nowej linii :)

0 ____/\
1 ___/__\
2 __/____\
3 _/______\

chcemy narysować x segmentów, zaczynamy pętlę od 0 i lecimy:

linia numer i, powtarzamy &nbsp; (czyli nasz znak odstępu) x - i razy, piszemy / następnie powtarzamy odstęp i * 2 (razy?!?), wypisujemy znak \ i dajemy <br> :P

nie zapominamy o <pre> dzięki czemu nasz obrazek się nie rozjedzie :P

lektura na dziś:

https://secure.php.net/manual/en/function.str-repeat.php

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre

https://medium.com/@patrickbrosset/when-does-white-space-matter-in-html-b90e8a7cdd33

 

0 głosów
odpowiedź 5 listopada 2018 przez X3h Dyskutant (9,540 p.)
edycja 6 listopada 2018 przez X3h

Dla wysokości 0
albo - albo coś innego, ale raczej nic.

Dla wysokości 1
/\ zero spacji na początku
-- dwa myślniki

Dla wysokości 2:
 /\  jedna spacja na początku
/  \ zero spacji na początku, dwie spacje pomiędzy
---- cztery myślniki

Dla wysokości 3:
  /\   dwie spacje na początku 
 /  \  jedna spacja na początku, dwie spacje pomiędzy
/    \ zero spacji na początku, cztery pomiędzy
------ sześć myślników

Minimalna wysokość wynosi jeden.
Każda kolejna wysokość zwiększa dwukrotnie ilość myślników względem wysokości jeden.
Każda kolejna wysokość zwiększa o jedną spację początkową dla pierwszego elementu.
Każda kolejna wysokość zmniejsza o jedną spację początkową.
Każda kolejna wysokość zwiększa o dwa ilość spacji pomiędzy krawędziami trójkąta oraz za pierwszym razem wynosi ona zero potem dwa i kolejno cztery.

Dla wysokości n:
n-1 spacji na początku
n-2 spacji na początku, dwie spacje pomiędzy
n-3 spacji na początku, o dwie spacje więcej pomiędzy niż poprzednio
2*n myślników

function drawSimpleTriange($n){
    
    for($i = 0, $j = 0; $i < $n; ++$i, $j += 2){
        
        $line = "";
        
        for($k = $i; $k < $n-1; $k++){
		    $line = $line." ";
	    }
	    
	    $line = $line."/";
	    
	    for($k = $j; $k > 0; --$k){
    		$line = $line." ";
    	}
    	
    	$line = $line."\\";
        
        echo $line."\r\n";
        
    }
    
    $line = "";
    
    for($i = 0; $i < $n*2; ++$i){
    	$line = $line."-";
    }
    
    echo $line;
    
}

drawSimpleTriange(3);// Przykładowe użycie

Wynik:

  /\
 /  \
/    \
------
–2 głosów
odpowiedź 5 listopada 2018 przez Misiek Mądrala (5,300 p.)

coś takiego mi przyszło do głowy

<?php 
for($i = 0; $i <= 3; $i++)
{
    if($i == 0)
    {
        echo "&nbsp;&nbsp;/\\";
    }elseif($i == 1)
    {
        echo "&nbsp;/&nbsp;&nbsp;\\";
    }elseif ($i == 2)
    {
        echo "/&nbsp;&nbsp;&nbsp;&nbsp;\\";
    }elseif($i == 3){
        echo "-----";
    }
    echo "<br />";
}

?>

 

1
komentarz 5 listopada 2018 przez kenjiro244 Dyskutant (8,600 p.)

Więc w przypadku kiedy ktoś chciałby narysować choinkę o wysokości załóżmy 100. Zmuszony jest napisanie 100 elseif w każdym z powiększoną ilością przerw :D + w przypadku kiedy dla każdego obiegu pętli mamy tylko jedną możliwość to poco w takim razie mamy tą pętle :D. Raczej nie jest to najlepsze rozwiązanie.

<?php 

        echo "&nbsp;&nbsp;/\\";
        echo "&nbsp;/&nbsp;&nbsp;\\";
        echo "/&nbsp;&nbsp;&nbsp;&nbsp;\\";
        echo "-----";
        echo "<br />";
 
?>

 

1
komentarz 5 listopada 2018 przez Misiek Mądrala (5,300 p.)
dlatego też pytałem jakie są wymagania co do kodu :P

Podobne pytania

0 głosów
1 odpowiedź 1,044 wizyt
pytanie zadane 28 kwietnia 2020 w PHP przez KotelPL Początkujący (400 p.)
0 głosów
1 odpowiedź 1,318 wizyt
pytanie zadane 10 lutego 2017 w PHP przez Kichu Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 229 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...