У меня есть объект stdclass, как показано ниже:
stdClass Object ( [text] => Parent [values] => Array ( [0] => stdClass Object ( [id] => /m/0c02911 [text] => Laurence W. Lane Jr. [url] => http://www.freebase.com/view/m/0c02911 ) ) )
Я перебираю несколько таких объектов, некоторые из которых имеют
stdClass Object ( [text] => Named after [values] => Array ( [0] => stdClass Object ( [id] => /m/0c02911 [text] => Stanford [url] => SomeURL ) ) )
Мне было интересно, как я могу получить доступ к объекту «values», если он приходит после «текста», который имеет «родительский» как его значение?
То, что вы ищете, это Object ['values'] [0]: «values» – это комбинация клавиш, подобная «text», а [0] – индекс внутри того массива, к которому вы хотите получить доступ. поэтому, если вы хотите получить id в гнезде, вам нужно будет сделать что-то вроде
Object['values'][0]['id']
или
Object['values'][0]->id
который должен предоставить вам / m / 0c02911. Но я понятия не имею, как вы делаете свой цикл, поэтому вам придется приспособить его к вашим потребностям и поместить надлежащие переменные, где им нужно идти в этом коде в вашем цикле. Не совсем уверен, на каком языке вы работаете.
есть серверные способы превратить его в массив:
Первое решение:
$value = get_object_vars($object);
Второе решение:
$value = (array) $object;
Третье решение
$value = json_decode(json_encode($object), true);
получить значение преобразованного массива
echo $value['values']['0']['id'];
Альтернативный способ доступа к объектам var без преобразования объекта, попробуйте
$object->values->{'0'}->id
Расширяя (или, скорее, минимизируя) ответ от Somwang Souksavatd, мне нравится обращаться к значениям Object следующим образом:
echo get_object_vars($object)['values']['0']['id'];
$Obj=stdClass Object ( [text] => Named after [values] => Array ( [0] => stdClass Object ( [id] => /m/0c02911 [text] => Stanford [url] => SomeURL ) ) ) $Values= $result->values; $Item = $Values[0]; $id=$Item->id; $text = $Item->text; $url=$Item->url;
$Obj=stdClass Object ( [text] => Named after [values] => Array ( [0] => stdClass Object ( [id] => /m/0c02911 [text] => Stanford [url] => SomeURL ) ) ) $Values= $result->values; $Item = $Values[0]; $id=$Item->id; $text = $Item->text; $url=$Item->url;
Я делаю то же самое, и все, что я сделал, было этим;
<?php $stdObject = json_decode($stdClassObject); print $stdObject->values[0]->id;
У меня была одна и та же проблема, все еще не так уверенная, почему, но я смог заставить ее работать с помощью этого обходного пути:
$k2 ="1"; $elements = json_decode('{"id":"1","name":"User1"}'); //$elements['id'] == $k2; //****Not Working $tmp = (object)$elements; $tmp = $tmp ->id; //****Working //$tmp =$elements['id'] ; //****Not Working return $tmp == $k2;
Я должен сказать, что иногда доступ к элементу как массиву работает, а иногда и нет, (на PHP7 он работал для меня, но на PHP5.6 он этого не делал).
$elements
может быть Array, но я решил продемонстрировать с помощью json-строки.
Надеюсь, это поможет!