Substring extraction in PHP - Time & Space Complexity
When we extract a part of a string, it is important to know how the time needed grows as the string gets longer.
We want to find out how the work changes when the input string size changes.
Analyze the time complexity of the following code snippet.
$string = "Hello, world!";
$start = 7;
$length = 5;
$substring = substr($string, $start, $length);
echo $substring;
This code takes a string and extracts a smaller part starting at a certain position with a given length.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Copying characters from the original string to create the substring.
- How many times: The number of characters copied equals the length of the substring requested.
As the substring length grows, the work grows proportionally because each character must be copied.
| Input Size (substring length) | Approx. Operations |
|---|---|
| 10 | About 10 character copies |
| 100 | About 100 character copies |
| 1000 | About 1000 character copies |
Pattern observation: The time grows linearly with the length of the substring extracted.
Time Complexity: O(k)
This means the time needed grows directly with the length of the substring you want to extract.
[X] Wrong: "Extracting a substring always takes the same time no matter how long it is."
[OK] Correct: Actually, the function must copy each character one by one, so longer substrings take more time.
Understanding how substring extraction scales helps you reason about string operations in real projects and interviews.
"What if we extract a substring without specifying length, how would the time complexity change?"
Practice
substr($text, 2, 3) do?Solution
Step 1: Understand substr parameters
The first parameter is the string, the second is the start index (0-based), and the third is the length of substring.Step 2: Apply to given function
Starting at index 2 means the third character, and length 3 means extract 3 characters from there.Final Answer:
Extracts 3 characters from $text starting at index 2 -> Option CQuick Check:
substr(string, 2, 3) = 3 chars from index 2 [OK]
- Confusing start index with length
- Thinking start counts from 1 instead of 0
- Assuming length is mandatory
$str starting at position 4 with length 5 in PHP?Solution
Step 1: Recall substr syntax
substr(string, start, length) extracts substring starting at 'start' index with 'length' characters.Step 2: Match parameters to question
Start is 4, length is 5, so substr($str, 4, 5) is correct syntax.Final Answer:
substr($str, 4, 5); -> Option BQuick Check:
substr($str, 4, 5) = correct syntax [OK]
- Swapping start and length values
- Omitting length when needed
- Using 1-based start index
$text = "Hello World!"; echo substr($text, 6, 5);
Solution
Step 1: Identify substring start and length
Start index is 6 (0-based), length is 5 characters.Step 2: Extract substring from "Hello World!"
Index 6 is 'W', next 5 chars are 'World'.Final Answer:
World -> Option AQuick Check:
substr("Hello World!", 6, 5) = "World" [OK]
- Including the exclamation mark mistakenly
- Starting count from 1 instead of 0
- Confusing length with end index
$word = "concatenate"; echo substr($word, 3, 4);
Solution
Step 1: Locate substring "cat" in "concatenate"
"cat" starts at index 3: c(3), a(4), t(5).Step 2: Check length parameter
Length 4 extracts "cate" (4 chars), but "cat" is only 3 chars, so length should be 3.Final Answer:
The length parameter is too long; it should be 3 -> Option AQuick Check:
substr("concatenate", 3, 3) = "cat" [OK]
- Using wrong start index
- Assuming substr auto-trims extra chars
- Thinking substr can't extract middle parts
$data = "user:john;id:12345;role:admin";. How do you extract the user name "john" using substr and strpos functions in PHP?Solution
Step 1: Find start position of username
Use strpos($data, ':') to find colon after "user", add 1 to start after colon.Step 2: Find length of username substring
Find position of first semicolon with strpos($data, ';'), subtract start position and 1 to get length.Step 3: Use substr with calculated start and length
substr($data, start, length) extracts "john" correctly.Final Answer:
substr($data, strpos($data, ':') + 1, strpos($data, ';') - strpos($data, ':') - 1); -> Option DQuick Check:
Use strpos to find delimiters, substr extracts between them [OK]
- Hardcoding start and length without dynamic positions
- Using wrong delimiter positions
- Extracting wrong substring part
Ready to prove it?
Pass the test and this pattern moves unknown
