Illegal string offset error in PHP

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

Mastering Data Retrieval: Solving Illegal String Offset Errors in PHP

As developers working with APIs and server-side data, we frequently encounter situations where the data received from the backend doesn't conform exactly to the expected structure. One of the most common pitfalls involves attempting to treat a string as an array, leading to frustrating errors like "Illegal string offset."

This post dives deep into the specific error you are facing—an Illegal string offset when trying to extract nested data from JSON responses—and provides a robust, developer-focused solution. We will walk through the cause of the problem and demonstrate the correct way to handle complex, nested data structures in PHP, which is crucial for building reliable applications, especially within frameworks like Laravel.

Understanding the Error: Why "Illegal String Offset"?

The error message ErrorException: Illegal string offset 'id' tells us exactly what went wrong: you attempted to access an element inside a variable using array syntax (square brackets, e.g., $variable['key']), but the variable you were operating on was actually a string, not an array.

Let's analyze the data structure you provided:

php
array(3) {
    [0]=array(1) {
        ["answer"]=>
        string(218) "{\"id\":\"19\",\"question_id\":\"10\", ...}" // <-- This is a STRING!
    }
    // ... other elements
}

When you iterate through $answers and try to access $answer['answer']['id'], the variable $answer (which holds the value from the array index) is a string. PHP does not allow you to use object/array offset notation on a simple string in this context, hence the Illegal string offset error.

The core issue is that the data fetched from your server, even if it looks like JSON when printed, is being received as raw text (a string) and needs to be explicitly converted into a usable PHP array structure before you can access its keys.

The Solution: Decoding JSON for Nested Data

To solve this, the first step must always be to parse the incoming string data using the json_decode() function. This converts the JSON string into native PHP variables (arrays or objects) that we can manipulate easily.

Step-by-Step Implementation

Assuming $answers contains strings that need decoding, here is the corrected approach:

php
// Assume $answers is the array you received from Input::get()
$answers = Input::get('answers'); 

$extracted_ids = [];

foreach ($answers as $answer_item) {
    // 1. Decode the string content within the 'answer' key
    // We assume $answer_item['answer'] holds the JSON string we need to parse.
    $answer_data = json_decode($answer_item['