Я получаю странную ошибку, используя json_decode()
. Он правильно декодирует данные (я видел это с помощью print_r
), но когда я пытаюсь получить доступ к информации внутри массива, я получаю:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
Я только попытался сделать: $result['context']
где $result
данные, возвращенныеjson_decode()
Как я могу прочитать значения внутри этого массива?
Ответы:
Используйте второй параметр,
json_decode
чтобы он возвращал массив:источник
Функция
json_decode()
возвращает объект по умолчанию.Вы можете получить доступ к данным, как это:
Если у вас есть идентификаторы типа
from-date
(дефис может вызвать ошибку PHP при использовании вышеуказанного метода), вы должны написать:Если вы хотите массив, вы можете сделать что-то вроде этого:
Или приведите объект к массиву:
источник
Вы должны получить к нему доступ, используя
->
его как объект.Измените свой код с:
Для того, чтобы:
источник
if ($result->context = $var)
выражении. Это приводит к тому, что для свойства устанавливается значение var, и возвращается значение true, независимо от того,==
, в текущем состоянии вы присваиваете$var
значение$result->context
с помощью одного равенства=
. И онif statement
будет читать его так, как если бы он был пустым или нет, а если он$var
имеет значение, то это означает, что он не пустой и всегда будет возвращать true.Есть сегодня та же проблема, решаемая так:
Если вы позвоните,
json_decode($somestring)
вы получите объект, и вам нужно получить доступ к как$object->key
, но если вы позвоните,json_decode($somestring, true)
вы получите словарь и можете получить доступ к как$array['key']
источник
Используйте
true
в качестве второго параметра дляjson_decode
. Это будет декодировать JSON в ассоциативный массив вместоstdObject
экземпляров:Смотрите документацию для более подробной информации.
источник
Это не массив, это объект типа stdClass.
Вы можете получить к нему доступ следующим образом:
Больше информации здесь: Что такое stdClass в PHP?
источник
Как сказано в руководстве Php ,
Когда мы используем
json_decode();
, мы получаем объект типа stdClass в качестве возвращаемого типа. Аргументы, которые должны передаваться внутри,print_r()
должны быть либо массивом, либо строкой. Следовательно, мы не можем передать объект внутрьprint_r()
. Я нашел 2 способа справиться с этим.Приведите объект к массиву.
Это может быть достигнуто следующим образом.
Получая доступ к ключу Object
Как упоминалось ранее, когда вы используете
json_decode();
функцию, она возвращает Object из stdClass. Вы можете получить доступ к элементам объекта с помощью->
оператора.Во-первых, можно также использовать несколько ключей для извлечения вложенных элементов в случае, если у объекта есть вложенные массивы.
Есть и другие варианты,
print_r()
как, например,var_dump();
иvar_export();
PS : Кроме того, если вы установите второй параметр
json_decode();
дляtrue
, он автоматически преобразует объект вarray();
Вот некоторые ссылки:
http://php.net/manual/en/function.print-r.php
http: // php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
источник
Чтобы получить массив как результат из строки json, вы должны установить второй параметр как логическое значение true.
В противном случае $ result будет объектом std. но вы можете получить доступ к значениям как объект.
источник
Вы можете преобразовать объект stdClass в массив, например:
stdClsss в массив
источник
Когда вы пытаетесь обратиться к нему как
$result['context']
, вы рассматриваете его как массив, ошибка говорит вам, что вы на самом деле имеете дело с объектом, тогда вы должны получить к нему доступ как$result->context
источник
Вот подпись функции:
Когда param равен false, что по умолчанию, он вернет соответствующий тип php. Вы получаете значение этого типа, используя парадигму object.method.
Когда параметр равен true, он возвращает ассоциативные массивы.
Он вернет NULL в случае ошибки.
Если вы хотите получить значение через массив, установите для Assoc значение true.
источник
Иногда при работе с API вы просто хотите сохранить объект объектом. Чтобы получить доступ к объекту, который имеет вложенные объекты, вы можете сделать следующее:
Мы предполагаем, что когда вы печатаете объект, вы можете увидеть это:
Для доступа к первой части объекта:
И это приведет к «успеху»
Теперь давайте напишем другие части:
Ожидаемый результат будет "Роберт" с разрывом строки.
Вы также можете переназначить часть объекта другому объекту.
Ожидаемый результат будет "Роберт" с разрывом строки.
Для доступа к следующей клавише «1» процесс такой же.
Ожидаемый результат будет "США"
Надеюсь, это поможет вам понять объекты и почему мы хотим, чтобы объект был объектом. Вам не нужно преобразовывать объект в массив для доступа к его свойствам.
источник
вместо использования скобок используйте оператор объекта, например, мой массив, основанный на объекте базы данных, создается следующим образом в классе DB:
для доступа к информации я использую этот код на скрипте контроллера:
затем, чтобы отобразить информацию, которую я проверяю, чтобы увидеть, установлены ли servicecalls и имеет ли счет больше 0, помните, что это не массив, на который я ссылаюсь, поэтому я обращаюсь к записям с помощью оператора объекта "->" следующим образом:
источник
Я получил эту ошибку на ровном месте, потому что мой логин на facebook неожиданно перестал работать (я также сменил хостов) и выкинул эту ошибку. Исправить это действительно легко
Проблема была в этом коде
В основном функция isset () ожидает массив, но вместо этого находит объект. Простое решение - преобразовать объект PHP в массив, используя квантификатор (массив) . Ниже приведен фиксированный код.
Обратите внимание на использование квантификатора off array () в первой строке.
источник
Поменяй это на
источник