PHP Inverted Pyramid Star Pattern

Beginner
7 min read
Updated: Sep 2026
3 programs
Live preview

What Is This Pattern?

An inverted center-aligned pyramid prints the widest odd-width star row first, then narrows to a single tip star — with leading spaces so each shorter row stays centered.

Remember
Rule: for i from rows down to 1,
      print (rows - i) spaces, then (2 * i - 1) stars

*********
 *******
  *****
   ***
    *     ← 5 rows (base on top)

It is the flip of Program 5: keep the same space and star formulas, reverse only the outer loop. That mirrors how Program 2 inverts Program 1, but with odd-width centering.

How to Solve It

Two ways to emit the same shape — start with nested loops, then optionally shorten with str_repeat.

MethodIdeaBest for
Nested loopsCountdown $i; spaces then odd stars via echoLearning, interviews, exams
str_repeatBuild margin and star run in one expressionShorter demos once formulas click

Pseudocode

Pseudocode
for i from rows down to 1:
    for j from 1 to (rows - i):
        echo " "
    for k from 1 to (2 * i - 1):
        echo "*"
    echo PHP_EOL

Cheat sheet

GoalPattern
Countdown rowsfor ($i = $rows; $i >= 1; $i--)
Leading spacesfor ($j = 1; $j <= $rows - $i; $j++) echo " ";
Odd star runfor ($k = 1; $k <= 2 * $i - 1; $k++) echo "*";
End the rowecho PHP_EOL;
First printed row0 spaces + 2 * $rows - 1 stars
One-line shortcutecho str_repeat(" ", $rows - $i) . str_repeat("*", 2 * $i - 1) . PHP_EOL;
Upright versionfor ($i = 1; $i <= $rows; $i++) → Program 5

Printing Stars vs Starting a New Line

APIEffectUse for
echo " " / echo "*"Stays on the same lineEach space and each *
echo PHP_EOLEnds the current lineAfter both inner loops

Live Preview

Change the height and the inverted pyramid updates instantly — including the star total (n²).

Whole numbers from 1 to 14. Tap a chip or type a value — the preview redraws as you go.

Live result 5 rows · 25 stars
*********
 *******
  *****
   ***
    *

Worked Walkthrough — rows = 4

Trace spaces, stars, and the printed line as $i counts down from 4 to 1.

$iSpaces $rows - $iStars 2 * $i - 1Printed row
407*******
315*****
223***
131*

Star total: 7 + 5 + 3 + 1 = 16 = 4² — same as Program 5, only the print order differs. That square sum is why time is O(n²).

PHP Programs

Three complete programs: fixed rows, CLI input, and a str_repeat shortcut. Use View Output to reveal sample results.

Example 1 — Fixed $rows = 5

Hard-coded height — countdown outer loop with space and star inner loops.

PHP
<?php
$rows = 5;

for ($i = $rows; $i >= 1; $i--) {
    for ($j = 1; $j <= $rows - $i; $j++) {
        echo " ";
    }
    for ($k = 1; $k <= 2 * $i - 1; $k++) {
        echo "*";
    }
    echo PHP_EOL;
}
?>

How It Works

1. Set height. $rows = 5 means five lines from base to tip.

2. Outer loop counts down. $i runs from $rows down to 1 — widest row first.

3. Spaces, then stars. Print $rows - $i spaces, then 2 * $i - 1 stars with echo.

4. Break the line. echo PHP_EOL after both inner loops starts the next row.

When $i = 5 you get 0 spaces and 9 stars; when $i = 1 you get 4 spaces and 1 star.

Example 2 — User Input Version

Read the height from the CLI. Validate with is_numeric before casting.

PHP
<?php
echo "Enter the number of rows: ";
$input = trim(fgets(STDIN));

if (!is_numeric($input) || (int) $input < 1) {
    echo "Please enter a whole number of rows >= 1." . PHP_EOL;
} else {
    $rows = (int) $input;

    for ($i = $rows; $i >= 1; $i--) {
        for ($j = 1; $j <= $rows - $i; $j++) {
            echo " ";
        }
        for ($k = 1; $k <= 2 * $i - 1; $k++) {
            echo "*";
        }
        echo PHP_EOL;
    }
}
?>

How It Works

1. Prompt and read. Ask for a row count, then trim(fgets(STDIN)) to drop the trailing newline.

2. Validate first. Reject non-numeric or non-positive values before looping.

3. Same countdown core. Only the source of $rows changes — the space and star logic matches Example 1.

Example 3 — str_repeat for Spaces and Stars

Build each margin and odd star run in one expression — same shape, no explicit character loops.

PHP
<?php
$rows = 5;

for ($i = $rows; $i >= 1; $i--) {
    echo str_repeat(" ", $rows - $i) . str_repeat("*", 2 * $i - 1) . PHP_EOL;
}
?>

How It Works

1. Same countdown. Still walk $i from $rows down to 1.

2. Build each segment. str_repeat(" ", $rows - $i) is the margin; str_repeat("*", 2 * $i - 1) is the star run.

3. Learn loops first. Use Examples 1–2 when you need to show nested bounds; treat this as a polish shortcut afterward.

Edge Cases & Pitfalls

Check these before calling the solution done.

$i++

Upright pyramid by mistake

If you increment $i from 1 to $rows, you reprint Program 5. Use $i-- from $rows down to 1.

Tabs

Broken centering

Always print the space character " ", not tabs — tab width varies and skews the tip.

PHP_EOL inside

Column of stars

If echo PHP_EOL is inside either inner loop, each character lands on its own line. Print cells with echo; end the row only after both loops.

$rows = 1

Single tip star

Output is just * — base and tip coincide. A good sanity check.

$rows ≤ 0

Empty output

Outer loop never runs. Validate before looping for interactive programs.

Bad input

Check is_numeric

Letters or empty input fail is_numeric — validate before casting to int.

Time and Space Complexity

ProgramTimeExtra space
Nested loops (Examples 1–2)O($rows²)O(1)
str_repeat (Example 3)O($rows²)O($rows) per temporary row string

Total stars = 1 + 3 + … + (2n - 1) = n², plus up to Θ(n) spaces per row — still quadratic in n. Same totals as Program 5.

Key Takeaways

  • Rule: countdown $i; print $rows - $i spaces then 2 * $i - 1 stars.
  • Flip of Program 5: same formulas — only reverse the outer loop.
  • Break the row: call echo PHP_EOL only after both space and star loops.
  • Complexity: O(n²) time from n² stars; O(1) extra space for nested loops.

One line: for $i from $rows down to 1, print $rows - $i spaces and 2 * $i - 1 stars, then echo PHP_EOL.

Frequently Asked Questions

The outer loop runs i from rows down to 1. Stars still use 2*i-1, so large i prints many stars first. As i shrinks, stars become 9,7,5,… and spaces (rows-i) grow from 0 upward. Same formulas as Program 5 — only the order of i changes.
Spaces use (rows-i). When i is rows, the margin is 0; when i is 1, the margin is rows-1. As i steps down, the margin grows while 2*i-1 shrinks, which keeps shorter rows centered under the wide top.
Program 5 uses for ($i = 1; $i <= $rows; $i++) so stars grow. Program 6 uses for ($i = $rows; $i >= 1; $i--) with the same inner loops, so the base prints first and the tip last.
Program 2 is an inverted left-aligned triangle (i stars, no centering). Program 6 keeps (rows-i) spaces and odd star runs so the tip stays centered.
echo sends output without adding a line break. PHP_EOL ends the current line with a portable newline. Spaces and stars use echo; the row break uses echo PHP_EOL after both inner loops.
O(n²) for n rows. Same totals as Program 5; only iteration order differs. Total stars equal n².
Yes. With the countdown outer loop: echo str_repeat(" ", $rows - $i) . str_repeat("*", 2 * $i - 1) . PHP_EOL.
Use trim(fgets(STDIN)) and check is_numeric($input) before casting to int so bad input does not produce unexpected results.

Did you know?

This inverted pyramid is exactly Program 5 with the outer loop reversed — same formulas, different print order. Total stars still equal n².

Next: Inverted V Hollow

Move from a filled inverted pyramid to a hollow inverted-V outline.

Program 7 tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

12 people found this page helpful