A symmetric alphabet with star center prints left letters A..$i, an even star gap, then mirrored letters $i..A. Letter halves shrink while stars grow, so every row keeps the same width 2n.
Remember
Rule: left A..i + 2*(top-i) stars + right i..A
ABCDEEDCBA
ABCD**DCBA
ABC****CBA
AB******BA
A********A ← 5 rows (top = E)
On the first row the star count is 0, so the middle letter appears twice (EE in ABCDEEDCBA). That is intentional — left ends at $i and right starts at $i.
Approach
How to Solve It
Count down the letter-half end, then print three parts in order: left, stars, right.
Method
Idea
Best for
Three nested loops
Left letters, star loop, right letters
Learning, interviews, exams
str_repeat shortcut
Same letters; one call for the star gap
Cleaner demos once the shape is clear
Pseudocode
Pseudocode
$top = 'A' + $rows - 1
for $i from $top down to 'A':
for $j from 'A' to $i:
echo $j (no newline)
$stars = 2 * (ord($top) - ord($i))
echo $stars copies of '*'
for $m from $i down to 'A':
echo $m (no newline)
echo PHP_EOL
Cheat sheet
Goal
Pattern
Pick the letter-half end
for ($i = $top; $i >= 'A'; $i--)
Left ascending
for ($j = 'A'; $j <= $i; $j++) echo $j;
Star gap
$stars = 2 * (ord($top) - ord($i));
Right descending
for ($m = $i; $m >= 'A'; $m--) echo $m;
One-call stars
echo str_repeat("*", $stars);
End the row
echo PHP_EOL;
A–Z-safe height
Clamp $rows to 1–26
Printing Letters vs Starting a New Line
API
Effect
Use for
echo
Stays on the same line
Each letter and each star
echo PHP_EOL
Ends the current line
After left + stars + right
Print characters without a newline, then end the row once.
Try it
Live Preview
Change the row count and the symmetric star-center pattern updates instantly — including top letter and width.
Whole numbers from 1 to 13. Top letter is A + rows - 1; each row is width 2 × rows.
Doubled center: first row has zero stars, so the middle letter appears twice.
Complexity:O(n²) time; loops use O(1) extra space.
One line: for each end letter counting down, print A..$i, then 2*(ord($top)-ord($i)) stars, then $i..A.
Frequently Asked Questions
The left half prints A..E, and the right half prints E..A. When there are zero stars on the first row, E appears as the last character of the left half and the first character of the right half.
Stars per row are 2*(ord($top) - ord($end)). For top=E: 0, 2, 4, 6, 8 stars as end goes E, D, C, B, A.
Because it is computed as 2*(ord($top) - ord($i)), which is always a multiple of 2.
Yes. You can start the right half from chr(ord($i) - 1) instead of $i when there are zero stars, so the first row becomes ABCDEDCBA.
echo sends output without adding a line break. echo PHP_EOL ends the current line with a portable newline. Letters and stars use echo; the row break uses echo PHP_EOL after all three parts.
O(n²) for n rows. Each row prints a total of 2n characters (letters + stars), repeated across n rows.
Yes. echo str_repeat("*", $stars) prints the whole gap in one call. Nested star loops are fine for learning; str_repeat is a handy shortcut later.
Use trim(fgets(STDIN)) and check is_numeric($input) before casting to int, then clamp rows between 1 and 26 so bad input does not walk past Z.
🤔
Did you know?
Each row is: ascending letters from A to the row end, then 2*(ord($top) - ord($end)) stars, then descending letters back to A. The middle letter appears twice when star count is 0, producing ABCDEEDCBA on the first row. Total width stays constant at 2n characters per row.