Notice: Undefined offset
PHP Programming Language
Severity: MinorWhat Does This Error Mean?
Undefined offset means you tried to access a numbered (numeric) position in an array that does not exist. For example: $items[5] when the array only has positions 0, 1, 2, 3 — there is no position 5. This is a Notice, not a Fatal error — PHP continues running but shows the warning. The fix is to check that the position exists before accessing it.
Affected Models
- PHP 5.x
- PHP 7.x
- PHP 8.0 and earlier
Common Causes
- Accessing a numeric index beyond the length of the array
- A loop counter going past the last element
- Assuming an array has a certain number of elements when it actually has fewer
- An array was expected to be populated but was returned empty
- Working with results from explode() or split() and assuming a certain number of parts
How to Fix It
-
Before accessing a numeric array position, check it exists with isset(): if (isset($items[5])) { echo $items[5]; }
isset() returns true if the key exists and the value is not null. It is the standard way to safely check array access in PHP.
-
Check the length of the array before looping: for ($i = 0; $i < count($items); $i++) — always use count() to control the loop, not a hardcoded number.
count($array) returns the number of elements. A valid numeric index goes from 0 to count($array) - 1.
-
Use array_key_exists($key, $array) for a more explicit check: if (array_key_exists(5, $items)) — this differs from isset() because it returns true even if the value at that key is null.
isset() skips null values; array_key_exists() finds them. For most cases, isset() is fine.
-
When splitting a string with explode() and expecting a certain number of parts, check how many parts were actually returned.
Example: $parts = explode('-', $string); if (count($parts) >= 2) { echo $parts[1]; } — the string might not contain the separator at all.
-
Use the null coalescing operator (??) to provide a default if the key is missing: $value = $items[5] ?? 'default';
The ?? operator returns the left side if it exists and is not null, or the right side (default) if it does not. Available in PHP 7+.
When to Call a Professional
Undefined offset is always fixable yourself. Check that the index exists before accessing it. In PHP 8.1+, this notice was upgraded to a Warning to make it more visible.
Frequently Asked Questions
What is the difference between 'Undefined offset' and 'Undefined index'?
Undefined offset refers to a numeric (integer) key that does not exist: $arr[5] Undefined index refers to a string key that does not exist: $arr['name'] They are essentially the same error — accessing an array key that does not exist — just with different terminology for numeric vs string keys.
Why does PHP show a Notice instead of a Fatal error for this?
PHP treats undefined array access as a Notice (or Warning in PHP 8.1+) because it is recoverable — PHP just returns null and continues. Fatal errors are for situations where PHP genuinely cannot continue. However, just because PHP continues does not mean the notice should be ignored — it usually indicates a real bug in your logic.
What is the null coalescing operator (??) and when was it added?
The null coalescing operator (??) was added in PHP 7.0. It provides a shorthand for the common pattern: isset($x) ? $x : $default With ??: $value = $arr[5] ?? 'default' If $arr[5] exists and is not null, $value gets that value. Otherwise $value gets 'default'. It is safe — it does not trigger an undefined offset notice even when the key is missing.