Bird
Raised Fist0
PHPprogramming~10 mins

Printf and sprintf formatting in PHP - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Printf and sprintf formatting
Start
↓
Prepare format string
↓
Provide values to format
↓
Call printf or sprintf
↓
printf: Output formatted string directly
↓
sprintf: Return formatted string
↓
End
The program prepares a format string and values, then calls printf or sprintf to format the string. printf prints it directly, sprintf returns it.
Execution Sample
PHP
<?php
$number = 42;
printf("Number: %d\n", $number);
$str = sprintf("Hex: %x", $number);
echo $str;
?>
This code prints a decimal number using printf and stores a hex string using sprintf, then prints it.
Execution Table
StepActionFormat StringValueResult/Output
1Set $number-42-
2Call printfNumber: %d\n42Number: 42 (printed)
3Call sprintfHex: %x42Hex: 2a (returned)
4echo $str--Hex: 2a (printed)
5End--Execution stops
💡 All statements executed, program ends.
Variable Tracker
VariableStartAfter Step 1After Step 3Final
$numberundefined424242
$strundefinedundefinedHex: 2aHex: 2a
Key Moments - 3 Insights
Why does printf print directly but sprintf does not?
printf outputs the formatted string immediately (see step 2 in execution_table), while sprintf returns the formatted string for later use (see step 3).
What does %d and %x mean in the format string?
%d formats the value as a decimal integer (step 2), %x formats it as a lowercase hexadecimal (step 3).
Why do we need to echo $str after sprintf?
sprintf returns the formatted string but does not print it, so echo is needed to display it (step 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is printed by printf at step 2?
A42
BHex: 2a
CNumber: 42
DHex: 42
💡 Hint
Check the 'Result/Output' column at step 2 in execution_table.
At which step does $str get its value?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at variable_tracker for $str changes and execution_table step 3.
If we change %x to %X in sprintf, what changes in output?
AOutput becomes uppercase hex letters
BOutput becomes decimal number
COutput becomes binary number
DNo change in output
💡 Hint
Recall %x is lowercase hex, %X is uppercase hex formatting.
Concept Snapshot
printf and sprintf format strings with placeholders like %d, %x.
printf prints formatted string directly.
sprintf returns formatted string for later use.
Use echo to print sprintf result.
Placeholders control how values appear.
Full Transcript
This example shows how printf and sprintf work in PHP. First, a number 42 is stored in $number. Then printf prints 'Number: 42' using %d to format the number as decimal. Next, sprintf formats the number as hexadecimal with %x and returns the string 'Hex: 2a' which is stored in $str. Finally, echo prints the $str value. printf outputs immediately, sprintf returns a string. Placeholders like %d and %x control formatting style.

Practice

(1/5)
1. What does the %s format specifier do in printf or sprintf in PHP?
easy
A. It formats the variable as a string.
B. It formats the variable as an integer.
C. It formats the variable as a floating-point number.
D. It formats the variable as a boolean.

Solution

  1. Step 1: Understand format specifiers

    The %s specifier is used to insert a string value into the formatted output.
  2. Step 2: Match specifier to variable type

    Since %s is for strings, it converts the variable to a string representation.
  3. Final Answer:

    It formats the variable as a string. -> Option A
  4. Quick Check:

    %s = string [OK]
Hint: Remember %s means string, %d integer, %f float [OK]
Common Mistakes:
  • Confusing %s with %d or %f
  • Using %s for numbers without converting
  • Thinking %s formats booleans
2. Which of the following is the correct syntax to print a floating-point number with 2 decimal places using printf in PHP?
easy
A. printf("%.2f", $number);
B. printf("%2f.", $number);
C. printf("%f.2", $number);
D. printf("%f2.", $number);

Solution

  1. Step 1: Identify correct decimal precision syntax

    In PHP, to format a float with 2 decimals, use %.2f where .2 specifies 2 decimal places.
  2. Step 2: Check each option's format string

    Only printf("%.2f", $number); uses %.2f correctly; others have misplaced or incorrect syntax.
  3. Final Answer:

    printf("%.2f", $number); -> Option A
  4. Quick Check:

    %.2f = float with 2 decimals [OK]
Hint: Use %.Nf to print float with N decimals [OK]
Common Mistakes:
  • Placing decimal after %f instead of before
  • Using %2f instead of %.2f
  • Adding extra characters inside format string
3. What will be the output of the following PHP code?
$name = "Alice";
$score = 95.678;
printf("Student: %s, Score: %.1f", $name, $score);
medium
A. Student: Alice, Score: 95.6
B. Student: Alice, Score: 95.7
C. Student: Alice, Score: 95.68
D. Student: Alice, Score: 95.678

Solution

  1. Step 1: Analyze format specifiers

    %s inserts the string $name as is. %.1f formats $score as a float with 1 decimal place, rounding the value.
  2. Step 2: Calculate rounded float

    95.678 rounded to 1 decimal place is 95.7.
  3. Final Answer:

    Student: Alice, Score: 95.7 -> Option B
  4. Quick Check:

    %.1f rounds 95.678 to 95.7 [OK]
Hint: %.1f rounds float to 1 decimal place [OK]
Common Mistakes:
  • Not rounding float correctly
  • Confusing %s and %f usage
  • Expecting full float without formatting
4. Identify the error in this PHP code snippet:
$value = 123;
printf("Value is %d.2", $value);
medium
A. The variable $value is not defined.
B. printf cannot print integers.
C. The format specifier %d.2 is invalid syntax.
D. The code is correct and prints 'Value is 123.2'.

Solution

  1. Step 1: Check format specifier syntax

    %d is for integers and does not support precision like .2. The correct usage is just %d.
  2. Step 2: Understand error cause

    Adding .2 after %d causes invalid format syntax, leading to an error or unexpected output.
  3. Final Answer:

    The format specifier %d.2 is invalid syntax. -> Option C
  4. Quick Check:

    %d does not take precision like %.2f [OK]
Hint: Use %d alone for integers; no decimal precision [OK]
Common Mistakes:
  • Trying to add decimal precision to %d
  • Confusing %d and %f format specifiers
  • Assuming printf auto-corrects invalid formats
5. You want to create a formatted string showing a product's name left-aligned in 10 spaces and its price right-aligned in 8 spaces with 2 decimals. Which sprintf format string is correct?
$product = "Pen";
$price = 1.5;
$result = sprintf("...", $product, $price);
hard
A. "%-8s%-10.2f"
B. "%10s%-8.2f"
C. "%10s%8.2f"
D. "%-10s%8.2f"

Solution

  1. Step 1: Understand alignment and width specifiers

    %-10s means left-align string in 10 spaces. %8.2f means right-align float in 8 spaces with 2 decimals.
  2. Step 2: Match requirements to options

    "%-10s%8.2f" matches left-aligned product name in 10 spaces and right-aligned price with 2 decimals in 8 spaces.
  3. Final Answer:

    "%-10s%8.2f" -> Option D
  4. Quick Check:

    %-10s left-align string, %8.2f right-align float [OK]
Hint: Use - for left-align, number for width, .N for decimals [OK]
Common Mistakes:
  • Mixing alignment flags (-) with wrong specifier
  • Swapping width numbers for string and float
  • Forgetting .2 for decimal precision on float
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard