crea pattern a stella con PHP for loop

Sto cercando di echo stelle e zero come il model qui sotto

* ***0 ******00 **********000 

Comunque sto ottenendo questo risultato

  * **0 ***00 ****000 *****0000 ******00000 

ecco il mio codice

 for ($i=0; $i<=10; $i++) { echo "*"; for ($j=0; $j<$i; $j++) { echo "*"; } for ($z=0; $z<$i; $z++) { echo "0"; } echo "</br>"; } ?> 

Il numero di stelle è indicato da numbers di triangolo, 1 , 1+2 , 1+2+3 . Si desidera incrementare il valore massimo del ciclo interno di $i ad each iterazione:

 $k = 0; for ($i=1; $i<=10; $i++) { $k += $i; for ($j=1; $j<=$k; $j++) { echo "*"; } ... } 

Questo è anche un buon caso in cui i loop dovrebbero essere inizializzati con 1 anziché 0 , perché è più intuitivo. 0 loops basati su 0 funzionano meglio quando si lavora con gli arrays.

Penso che qualcosa del genere sia più efficiente; è ansible memorizzare nella cache la sequenza corrente di stelle e zeri.

 $cache_star = ""; $cache_zero = ""; for ($i=1; $i<=10; $i++) { for ($j=1; $j<=$i; $j++) { $cache_star .= "*"; } echo $cache_star.$cache_zero; $cache_zero .= "0"; } 

Odora di compiti a casa … Ma ok, che dire di questo:

 $star = "*"; echo $star."\n"; for ($i=0; $i<=10; $i++) { $star = $star."**"; echo $star; echo str_repeat("0", $i+1); echo "\n"; } 

Risultato:

 * ***0 *****00 *******000 *********0000 ***********00000 *************000000 ***************0000000 *****************00000000 *******************000000000 *********************0000000000 ***********************00000000000 

demo:

http://sandbox.onlinephpfunctions.com/code/583644f782005adb9e018b965cbbdefaf63c7c79

Ecco cosa ho ottenuto:

 for($i = 1; $i != 5; $i++) { $triangle = (0.5 * $i) * ($i + 1); echo str_repeat('*', $triangle) . str_repeat('0', $i) . PHP_EOL; } 

Usa la formula 0.5n(n + 1) – la formula dei numbers triangolari.

Esempio di output:

 *0 ***00 ******000 **********0000