Bird
Raised Fist0
PHPprogramming~20 mins

CSV file reading and writing in PHP - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
CSV Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this PHP code reading a CSV file?

Consider the following PHP code that reads a CSV file and prints each row as a JSON string.

$file = fopen('data.csv', 'r');
while (($row = fgetcsv($file)) !== false) {
    echo json_encode($row) . "\n";
}
fclose($file);

Assuming data.csv contains these lines:

apple,banana,cherry
1,2,3
x,y,z

What will be the output?

PHP
$file = fopen('data.csv', 'r');
while (($row = fgetcsv($file)) !== false) {
    echo json_encode($row) . "\n";
}
fclose($file);
A
["apple","banana","cherry"]
["1","2","3"]
["x","y","z"]
B
Error: Cannot open file
C
["apple,banana,cherry"]
["1,2,3"]
["x,y,z"]
D
apple,banana,cherry
1,2,3
x,y,z
Attempts:
2 left
💡 Hint

Remember that fgetcsv returns an array of fields for each line.

❓ Predict Output
intermediate
2:00remaining
What does this PHP code write to a CSV file?

Given this PHP code that writes data to a CSV file:

$data = [
    ['Name', 'Age', 'City'],
    ['Alice', 30, 'New York'],
    ['Bob', 25, 'Los Angeles']
];
$file = fopen('output.csv', 'w');
foreach ($data as $row) {
    fputcsv($file, $row);
}
fclose($file);

What will be the content of output.csv after running this code?

PHP
$data = [
    ['Name', 'Age', 'City'],
    ['Alice', 30, 'New York'],
    ['Bob', 25, 'Los Angeles']
];
$file = fopen('output.csv', 'w');
foreach ($data as $row) {
    fputcsv($file, $row);
}
fclose($file);
A
Name,Age,City
Alice,30,New York
Bob,25,Los Angeles
B
["Name","Age","City"]
["Alice",30,"New York"]
["Bob",25,"Los Angeles"]
C
Name;Age;City
Alice;30;New York
Bob;25;Los Angeles
D
Error: Cannot write to file
Attempts:
2 left
💡 Hint

fputcsv writes arrays as comma-separated lines by default.

🔧 Debug
advanced
2:00remaining
Why does this PHP code reading CSV raise a warning?

Look at this PHP code snippet:

$file = fopen('data.csv', 'r');
while ($row = fgetcsv($file)) {
    print_r($row);
}
fclose($file);

Sometimes it raises a warning: Warning: fgetcsv() expects parameter 1 to be resource, bool given. Why?

PHP
$file = fopen('data.csv', 'r');
while ($row = fgetcsv($file)) {
    print_r($row);
}
fclose($file);
ABecause fgetcsv requires a string filename, not a resource.
BBecause print_r cannot print arrays returned by fgetcsv.
CBecause fopen failed and returned false, so fgetcsv got a boolean instead of a file resource.
DBecause fclose was called before the loop started.
Attempts:
2 left
💡 Hint

Check the return value of fopen before using it.

📝 Syntax
advanced
2:00remaining
Which option correctly reads a CSV file into an array of rows?

Which PHP code snippet correctly reads all rows from a CSV file data.csv into an array $rows?

A
$rows = [];
$file = fopen('data.csv', 'r');
while ($row = fgetcsv($file)) {
    $rows[] = $row;
}
fclose($file);
B
$rows = [];
$file = fopen('data.csv', 'r');
while (($row = fgetcsv($file)) !== false) {
    $rows[] = $row;
}
fclose($file);
C
$rows = [];
$file = fopen('data.csv', 'r');
while ($row = fgetcsv($file) !== false) {
    $rows[] = $row;
}
fclose($file);
D
$rows = [];
$file = fopen('data.csv', 'r');
while ($row !== false = fgetcsv($file)) {
    $rows[] = $row;
}
fclose($file);
Attempts:
2 left
💡 Hint

Remember operator precedence and correct syntax for while loops.

🚀 Application
expert
2:00remaining
How to write a CSV file with semicolon delimiter in PHP?

You want to write a CSV file data.csv where fields are separated by semicolons (;) instead of commas. Which code snippet correctly does this?

A
$file = fopen('data.csv', 'w');
fputcsv($file, ['a', 'b', 'c']);
fclose($file);
B
$file = fopen('data.csv', 'w');
fputcsv($file, ['a', 'b', 'c'], ',');
fclose($file);
C
$file = fopen('data.csv', 'w');
fwrite($file, 'a;b;c\n');
fclose($file);
D
$file = fopen('data.csv', 'w');
fputcsv($file, ['a', 'b', 'c'], ';');
fclose($file);
Attempts:
2 left
💡 Hint

Check the third parameter of fputcsv for delimiter.

Practice

(1/5)
1. Which PHP function is used to read a line from a CSV file and parse it into an array?
easy
A. fgetcsv()
B. fputcsv()
C. fread()
D. fwrite()

Solution

  1. Step 1: Understand CSV reading functions

    PHP provides fgetcsv() to read a line from a CSV file and convert it into an array of values.
  2. Step 2: Differentiate from writing functions

    fputcsv() writes arrays to CSV files, while fread() and fwrite() handle raw file reading/writing without CSV parsing.
  3. Final Answer:

    fgetcsv() -> Option A
  4. Quick Check:

    Read CSV line as array = fgetcsv() [OK]
Hint: Use fgetcsv() to read CSV lines into arrays [OK]
Common Mistakes:
  • Confusing fgetcsv() with fputcsv()
  • Using fread() which reads raw data, not CSV parsed
  • Trying to read CSV without parsing into arrays
2. Which of the following is the correct way to open a CSV file for writing in PHP?
easy
A. $file = fopen('data.csv', 'r');
B. $file = fopen('data.csv', 'rw');
C. $file = fopen('data.csv', 'w');
D. $file = fopen('data.csv', 'x');

Solution

  1. Step 1: Understand fopen modes

    Mode 'w' opens a file for writing and truncates it if it exists, perfect for writing CSV files.
  2. Step 2: Check other modes

    'r' is read-only, 'rw' is invalid, 'x' creates a new file but fails if it exists.
  3. Final Answer:

    $file = fopen('data.csv', 'w'); -> Option C
  4. Quick Check:

    Open file for writing = 'w' mode [OK]
Hint: Use 'w' mode in fopen() to write files [OK]
Common Mistakes:
  • Using 'r' mode when intending to write
  • Using invalid mode 'rw'
  • Using 'x' which fails if file exists
3. What will be the output of the following PHP code snippet?
$file = fopen('data.csv', 'r');
$data = fgetcsv($file);
fclose($file);
print_r($data);

Assuming the first line of data.csv is:
John,Doe,30
medium
A. Array ( [0] => John [1] => Doe [2] => 30 )
B. John,Doe,30
C. Array ( [0] => 'John,Doe,30' )
D. Error: Cannot read file

Solution

  1. Step 1: Understand fgetcsv() output

    fgetcsv() reads one CSV line and returns an array splitting values by commas.
  2. Step 2: Analyze given CSV line

    The line 'John,Doe,30' splits into array elements: 'John', 'Doe', and '30'.
  3. Final Answer:

    Array ( [0] => John [1] => Doe [2] => 30 ) -> Option A
  4. Quick Check:

    fgetcsv() splits CSV line into array [OK]
Hint: fgetcsv() returns array of CSV fields from one line [OK]
Common Mistakes:
  • Expecting a string instead of an array
  • Assuming fgetcsv returns raw line string
  • Not closing the file after reading
4. Identify the error in the following PHP code that writes data to a CSV file:
$file = fopen('output.csv', 'r');
fputcsv($file, ['Alice', 'Smith', 25]);
fclose($file);
medium
A. Array syntax is incorrect
B. fputcsv() cannot write arrays
C. Missing fclose() call
D. File opened in read mode instead of write mode

Solution

  1. Step 1: Check fopen mode

    The file is opened with 'r' (read) mode, which does not allow writing.
  2. Step 2: Understand fputcsv requirements

    fputcsv() requires the file to be opened in write ('w') or append ('a') mode to write data.
  3. Final Answer:

    File opened in read mode instead of write mode -> Option D
  4. Quick Check:

    Open file in write mode before writing [OK]
Hint: Open file with 'w' or 'a' before writing CSV [OK]
Common Mistakes:
  • Opening file in 'r' mode when writing
  • Forgetting to close the file
  • Misunderstanding fputcsv() input
5. You want to read a CSV file and write only rows where the third column is greater than 50 to a new CSV file. Which code snippet correctly implements this?
hard
A. $in = fopen('input.csv', 'w'); $out = fopen('output.csv', 'r'); while (($row = fgetcsv($in)) !== false) { if ($row[2] > 50) { fputcsv($out, $row); } } fclose($in); fclose($out);
B. $in = fopen('input.csv', 'r'); $out = fopen('output.csv', 'w'); while (($row = fgetcsv($in)) !== false) { if ($row[2] > 50) { fputcsv($out, $row); } } fclose($in); fclose($out);
C. $in = fopen('input.csv', 'r'); $out = fopen('output.csv', 'w'); while (($row = fgetcsv($out)) !== false) { if ($row[2] > 50) { fputcsv($in, $row); } } fclose($in); fclose($out);
D. $in = fopen('input.csv', 'r'); $out = fopen('output.csv', 'w'); while (($row = fgets($in)) !== false) { if ($row[2] > 50) { fputcsv($out, $row); } } fclose($in); fclose($out);

Solution

  1. Step 1: Open input file for reading and output file for writing

    Use 'r' mode for reading input and 'w' mode for writing output.
  2. Step 2: Read each CSV row with fgetcsv() from input and check third column

    Use fgetcsv($in) to read rows, then check if $row[2] > 50.
  3. Step 3: Write qualifying rows to output with fputcsv()

    If condition passes, write row to output file using fputcsv($out, $row).
  4. Final Answer:

    Code snippet B correctly reads, filters, and writes CSV rows -> Option B
  5. Quick Check:

    Read with fgetcsv(), filter by column, write with fputcsv() [OK]
Hint: Read with fgetcsv(), filter rows, write with fputcsv() [OK]
Common Mistakes:
  • Opening files with wrong modes
  • Using fgets() instead of fgetcsv() for CSV reading
  • Mixing input and output file handles
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