PHP Number Triangle Pattern (Starting from 11)

Definition
What Is This Pattern?
An increasing number triangle from 11 prints $i values on row $i, each computed as 9 + $i + $j — so the first cell is always 11.
Rule: for i from 1 to rows
for j from 1 to i
print (9 + i + j) and a space
11
12 13
13 14 15
14 15 16 17
15 16 17 18 19 ← rows = 5
Follows the number-star diamond in Program 31; next is the same shape starting from 1 in Program 33.
Approach
How to Solve It
Outer loop grows $i. Inner loop prints $i values with the formula 9 + $i + $j, separated by spaces.
| Method | Idea | Best for |
|---|
Formula 9 + $i + $j | Base offset 9 shifts the triangle to start at 11 | Learning, interviews, exams |
| Custom base | $baseVal + $i + $j with CLI input | Flexible starting number |
Pseudocode
for i from 1 to rows:
for j from 1 to i:
print (9 + i + j) and a space
print newline
Cheat sheet
| Goal | Pattern |
|---|
| Grow each row | for ($i = 1; $i <= $rows; $i++) |
| Print i values | for ($j = 1; $j <= $i; $j++) |
| Start at 11 | echo (9 + $i + $j) . " "; |
| Custom base | echo ($baseVal + $i + $j) . " "; |
| End of row | echo PHP_EOL; |
Printing Numbers vs Starting a New Line
| API | Effect | Use for |
|---|
echo value . " " | Stays on the same line | Each number on the row |
echo PHP_EOL | Ends the current line | After the inner loop finishes |
Print values without a newline, then end the row once.
Try it
Live Preview
Change the row count and the increasing triangle updates instantly — capped at 9 for readable demos.
Trace
Worked Walkthrough — $rows = 5
Trace how each ($i, $j) pair maps to 9 + $i + $j.
$i | Values | Count | Prints |
|---|
1 | 11 | 1 | 11 |
2 | 12, 13 | 2 | 12 13 |
3 | 13, 14, 15 | 3 | 13 14 15 |
4 | 14..17 | 4 | 14 15 16 17 |
5 | 15..19 | 5 | 15 16 17 18 19 |
Total numbers = 1 + 2 + … + n = n(n+1)/2 → O(n²).
Code
PHP Programs
Three complete programs: fixed $rows = 5, custom base with CLI input, and a compact $rows = 3 demo. Use View Output to reveal sample results.
Example 1 — Fixed $rows = 5
Hard-coded height — print 9 + $i + $j with a trailing space on each cell.
<?php
for ($i = 1; $i <= 5; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo (9 + $i + $j) . " ";
}
echo PHP_EOL;
}
?>
11
12 13
13 14 15
14 15 16 17
15 16 17 18 19
How It Works
1. Outer grows the width. Row $i prints exactly $i numbers.
2. Formula fills the cells. 9 + $i + $j makes the first cell 11 and each row start one higher.
3. Newline once. Call echo PHP_EOL only after the inner loop finishes.
Example 2 — Custom Base and Rows
Read $rows and $baseVal from the CLI, validate, then use $baseVal + $i + $j.
<?php
echo "Enter rows: ";
$rowsInput = trim(fgets(STDIN));
if (!is_numeric($rowsInput) || (int) $rowsInput <= 0) {
echo "Please enter a positive integer." . PHP_EOL;
exit(1);
}
echo "Enter base: ";
$baseInput = trim(fgets(STDIN));
if (!is_numeric($baseInput)) {
echo "Please enter a whole number." . PHP_EOL;
exit(1);
}
$rows = (int) $rowsInput;
$baseVal = (int) $baseInput;
for ($i = 1; $i <= $rows; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo ($baseVal + $i + $j) . " ";
}
echo PHP_EOL;
}
?>
How It Works
1. Prompt and validate. Reject non-numeric input and non-positive $rows before printing.
2. Same core. $baseVal replaces hard-coded 9 — use 9 to start at 11.
3. Safer input tip. Cap demos for readable output:
if (!is_numeric($rowsInput) || (int) $rowsInput < 1 || (int) $rowsInput > 9) {
echo "Enter a whole number from 1 to 9." . PHP_EOL;
exit(1);
}
Example 3 — Compact $rows = 3
Same structure with only three rows — easy to confirm the formula on paper.
<?php
$rows = 3;
for ($i = 1; $i <= $rows; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo (9 + $i + $j) . " ";
}
echo PHP_EOL;
}
?>
How It Works
1. Three rows. $i = 1 → 11; $i = 2 → 12 13; $i = 3 → 13 14 15.
2. Trace on paper. If you forget the trailing space, numbers glue together (1213).
3. Scale up next. Once the small demo is clear, use Examples 1–2 for five rows or a custom base.
Edge Cases & Pitfalls
Check these before calling the solution done.
wrong baseOffset off by one
Using 10 + $i + $j or $i + $j shifts every value — the triangle no longer starts at 11. Keep 9 + $i + $j.
j <= rowsRectangle instead of triangle
Inner bound $j <= $rows makes every row the same width. Use $j <= $i.
no spaceGlued numbers
Without . " ", values run together (1213). Always print a trailing space.
PHP_EOL insideBroken rows
If echo PHP_EOL sits inside the inner loop, you get one number per line. Call it only after the loop.
rows = 1Single value
Output is just 11. A good sanity check for input validation.
fgetsCheck is_numeric
Bare (int) casts turn non-numeric strings into 0 — prefer is_numeric before casting.
Analysis
Time and Space Complexity
| Program | Time | Extra space |
|---|
| Fixed / input (Examples 1–2) | O(n²) | O(1) |
| Compact rows = 3 (Example 3) | O(n²) | O(1) |
Row $i prints i numbers. Total = 1 + 2 + … + n = n(n+1)/2 → O(n²) time. Only a few loop variables are needed.
Remember
Key Takeaways
Formula: each cell is 9 + $i + $j — first cell is always 11.
Growing width: inner loop runs $j = 1..$i so row $i has $i numbers.
Break the row: values with spaces in the inner loop; echo PHP_EOL after it finishes.
Complexity: O(n²) time from n(n+1)/2 prints; O(1) extra space.
One line: for each row $i, print 9 + $i + $j for $j = 1..$i with spaces, then echo PHP_EOL.
Frequently Asked Questions
An increasing triangle from 11: for rows=5 you get 11 / 12 13 / 13 14 15 / 14 15 16 17 / 15 16 17 18 19 — each value is 9 + $i + $j.
Because the printed value is 9 + $i + $j. On the first row $i = 1 and $j = 1, so 9 + 1 + 1 = 11.
It is a base offset. Change 9 to any base value to shift the entire triangle — see Example 2.
Program 32 uses 9 + $i + $j (starts at 11). Program 33 uses $i + $j - 1 (starts at 1).
echo (9 + $i + $j) . " " keeps values separated on the same row. echo PHP_EOL ends the row.
echo value . " " stays on the same line. echo PHP_EOL ends the row after the inner loop finishes.
Use trim(fgets(STDIN)) and check is_numeric($input) before casting to int — see Example 2.
O(n²) for n rows because total prints are 1 + 2 + … + n = n(n+1)/2.
🤔
Did you know?
Each printed value is computed as 9 + $i + $j. Row $i = 1 prints 11; row $i = 2 prints 12 and 13 — a left-shifted increasing triangle.
Next: Increasing Triangle from 1
Continue with the same shape using $i + $j - 1 instead of 9 + $i + $j.
Program 33 tutorial →About the author
Developer, cloud engineer, and technical writer
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