Как получить доступ к объекту stdclass после определенной пары ключ-значение? - PullRequest
13 голосов
/ 04 мая 2011

У меня есть объект 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
                )

        )

)

Мне было интересно, как я получу доступ к "Значения "объект", если он идет после "текста", который имеет "Родитель" в качестве значения?

Ответы [ 6 ]

42 голосов
/ 26 февраля 2013

Есть несколько способов превратить его в массив:

Первое решение:

$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
2 голосов
/ 16 февраля 2014

Расширяя (или, вернее, минимизируя) ответ Сомвана Соуксаватда, я люблю получать доступ к значениям объекта, например:

echo get_object_vars($object)['values']['0']['id'];
0 голосов
/ 02 марта 2016

У меня была та же проблема, но я все еще не уверен, почему, но я смог заставить ее работать, используя этот обходной путь:

$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 может быть массивом, но я решил продемонстрировать с помощью строки json.

Надеюсь, это поможет как-то !!!

0 голосов
/ 01 ноября 2013

Я делаю то же самое, и все, что я сделал, было это;

<?php
$stdObject = json_decode($stdClassObject);
print $stdObject->values[0]->id;
0 голосов
/ 31 мая 2013


        $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;


0 голосов
/ 04 мая 2011

То, что вы ищете, это Object ['values'] [0]: 'values' - это раскладка клавиатуры точно так же, как 'text', а [0] - это индекс внутри этого массива, к которому вы хотите получить доступ.поэтому, если вы хотите получить идентификатор глубоко в гнезде, вам нужно сделать что-то вроде

Object['values'][0]['id']

или

Object['values'][0]->id

, что должно дать вам / m / 0c02911.Но я понятия не имею, как вы выполняете свой цикл, поэтому вам придется настроить его в соответствии с вашими потребностями и разместить соответствующие переменные, где они должны идти в этом коде в вашем цикле.Не совсем уверен, с каким языком вы работаете.

...