«Невозможно использовать операторы назначения со смещениями строк» ​​- Laravel

У меня есть приложение в Laravel, которое берет кусок данных из dB и отображает его как JSON. Следующая строка кода генерирует ошибку заголовка:

$decodedData['detail']['is_stem'] = isset($detailData->is_stem) ? $detailData->is_stem : 0;

Ошибка: Невозможно использовать операторы назначения со смещениями строк

$ decodedData - это массив большего размера, который в конечном итоге возвращается как JSON. Он создан таким образом:

$decodedData = json_decode($detailData->detail, true);

$ detailData - это объект, который выглядит так:

App\CareersDetails Object
(
    [connection:protected] => mysql
    [table:protected] => 
    [primaryKey:protected] => id
    [keyType:protected] => int
    [incrementing] => 1
    [with:protected] => Array
        (
        )

    [withCount:protected] => Array
        (
        )

    [perPage:protected] => 15
    [exists] => 1
    [wasRecentlyCreated] => 
    [attributes:protected] => Array
        (
            [id] => 4
            [code] => 1234
            [title] => StackOverFlow
            [category] => My Category
            [detail] => "Some details in JSON"
            [is_stem] => 1
            [created_at] => 2018-12-28 17:05:15
            [updated_at] => 2018-12-28 17:05:15
        )

    [original:protected] => Array
        (
            [id] => 7
            [code] => 7890
            [title] => StackOverFlowRocks
            [category] => My Category
            [detail] => "Some details in JSON format"
            [is_stem] => 1
            [created_at] => 2018-12-28 17:05:15
            [updated_at] => 2018-12-28 17:05:15
        )

    [changes:protected] => Array
        (
        )

    [casts:protected] => Array
        (
        )

    [dates:protected] => Array
        (
        )

    [dateFormat:protected] => 
    [appends:protected] => Array
        (
        )

    [dispatchesEvents:protected] => Array
        (
        )

    [observables:protected] => Array
        (
        )

    [relations:protected] => Array
        (
        )

    [touches:protected] => Array
        (
        )

    [timestamps] => 1
    [hidden:protected] => Array
        (
        )

    [visible:protected] => Array
        (
        )

    [fillable:protected] => Array
        (
        )

    [guarded:protected] => Array
        (
            [0] => *
        )

)

Когда я отлаживаю, используя:

print_r($detailData->is_stem);

Система выводит 1. Значит, установлено.

Альтернативно, мой массив $ decodedData виноват?

Обновлять

Благодаря комментариям я заметил, что мои $ decodedData - это не массив, это строка.

Поэтому я бросил

`$detailData->detail`

На страницу моего браузера с print_r и запустил ее с помощью простого отдельного PHP-скрипта:

$payload = "JSON FROM $detailData->detail";
$data = json_decode($payload,true);
$data['detail']['is_stem'] = 1;
print_r($data );

Это работает. Следовательно, теперь у меня вопрос: почему дамп строки из print_r работает, а мое приложение на основе Laravel - нет?

Или, другими словами, почему json_decode возвращает строку в приложении Laravel, а массив в приложении PHP с тем же вводом?

$decodedData['detail'] - это строка, а не массив, поэтому вы не можете назначить ему подключ.
aynber 28.12.2018 19:37

Спасибо @aynber, я обновил свой вопрос, добавив некоторые дополнения из ваших отзывов.

Colin 28.12.2018 19:50

В вашем последнем редактировании есть некоторые синтаксические ошибки, поэтому вы можете их исправить. Что вы имеете в виду, что приложение Laravel не работает?

aynber 28.12.2018 19:52

Обновил мой вопрос, чтобы исправить синтаксис. Проблема связана с приложением Laravel, но когда я выгружаю содержимое $ detailData-> detail с помощью print_r в свой браузер и запускаю его с помощью простого сценария PHP, он создает массив, как и ожидалось.

Colin 28.12.2018 19:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
1 164
1

Ответы 1

Проблема в моем случае заключалась в том, что мои данные JSON были дважды закодированы. Исправление было:

$decodedData = json_decode(json_decode($detailData->detail), true);

Обратите внимание, что это не лучшая практика, и мы полностью контролируем это, поэтому мы изменим это как можно скорее.

Другие вопросы по теме