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

PHP Rysowanie pętla for

VPS Starter Arubacloud
0 głosów
955 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,016 wizyt
pytanie zadane 28 kwietnia 2020 w PHP przez KotelPL Początkujący (400 p.)
0 głosów
1 odpowiedź 1,286 wizyt
pytanie zadane 10 lutego 2017 w PHP przez Kichu Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 215 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...