Возврат объекта PHP по номеру индекса (не имени) - PullRequest
12 голосов
/ 04 октября 2010

Цель: получить элемент данных из объекта PHP по номеру.

Это print_r ($ data) объекта:

stdClass Object
(
    [0] => stdClass Object
        (
            [TheKey] => 1456
            [ThingName] => Malibu
            [ThingID] => 7037
            [MemberOf] => California
            [ListID] => 7035
            [UserID] => 157
            [UserName] => John Doe
        )
)

Я не могу понятькак вытащить значение из этого.Это только одна запись объекта с несколькими записями, который должен быть по идентификатору, а не по имени.

Это несколько неудачных попыток проиллюстрировать цель:

echo $data -> 0 -> UserName;
echo $data[0] -> UserName;

Ответы [ 5 ]

32 голосов
/ 04 октября 2010

Обычно имена переменных PHP не могут начинаться с цифры. Вы не можете получить доступ к $data как к массиву, так как stdClass не реализует ArrayAccess - это просто обычный базовый класс.

Однако в подобных случаях вы можете попробовать получить доступ к атрибуту объекта по его числовому имени, например:

echo $data->{'0'}->UserName;

Единственная причина, по которой я могу придумать, почему ответ Спудли может вызвать ошибку, заключается в том, что вы используете PHP 4, который не поддерживает использование foreach для итерации объектов.

8 голосов
/ 01 июня 2012

Предложение BoltClock использовать "$ data -> {'0'} -> UserName", очевидно, больше не работает с PHP 5.

У меня была та же проблема, и я обнаружил, что current () будет работать, чтобы получить такой пронумерованный элемент класса, как этот ...

echo current($data)->UserName;

Или, если это не сработает (в зависимости от объекта), вам может потребоваться выполнить еще один вызов current (), например:

echo current(current($data))->UserName;
4 голосов
/ 03 марта 2014

это работает для PHP5 +

echo $data[0]->UserName;

или

foreach ($data as $data){
    echo $data->UserName;
    }

или как предложено @ orrd

current($data)->UserName works great too.
3 голосов
/ 04 октября 2010

Вы пробовали петлю foreach()? Это должно дать вам все доступные элементы, и ключи, которые он возвращает, могут дать вам лучшее представление о том, как получить к ним прямой доступ.

0 голосов
/ 04 октября 2010

попробуйте это:

echo $data[0]['UserName'];

В соответствии с руководством объекты не предназначены для использования таким образом.Комментарии на этой странице действительно дают возможность обойти это, если это необходимо для вас.Вы также можете просто положиться на массивы, если вы просто используете объект для свойств (а не поведения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...