Как перебрать массив элементов stdObject в PHP?

Это версия структуры данных print_r(), к которой мне нужно получить доступ через цикл foreach:

stdClass Object
(
    [DetailedResponse] => Array
        (
            [0] => stdClass Object
                ( ...
                )

            [1] => stdClass Object
                ( 
...

Теперь, как мне перебирать эти объекты?

Я чувствую, что должен делать что-то вроде этого:

$object->DetailedResponse[0];
$object->DetailedResponse[1];

Но как мне поместить его в цикл типа foreach!!


person tzmatt7447    schedule 31.08.2010    source источник
comment
Как мы можем ответить на этот вопрос, если вы не показываете, что var_export() делаете?   -  person Pekka    schedule 31.08.2010
comment
это это то, что var_exported!   -  person tzmatt7447    schedule 31.08.2010
comment
Пекка, это var_export() изд. Посмотрите Руководство по PHP, пример №2.   -  person Lekensteyn    schedule 31.08.2010


Ответы (4)


похоже, что в этом объекте есть несколько объектов.. вам может понадобиться выполнить больше циклов foreach.. этот код должен дать вам первый идентификатор сеанса в этом объекте.

foreach ($detailedresponses as $detailedresponse) {
    foreach ($detailedresponseas as $response) {
        echo $response->sessionId;

    }
}

запустите этот код, чтобы увидеть объект более четко:
echo '<pre>'; print_r($detailsresponses); exit;

замените '$detailedresponses' на ваше правильное имя переменной и опубликуйте его здесь, это должно упростить чтение.

ИЗМЕНИТЬ
проверьте этот URL, я поместил туда свои тестовые данные: http://pastie.org/1130373

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

И вы можете получить такие свойства:

echo $object->DetailedResponse[0]->sessionId;
person Maikel    schedule 31.08.2010
comment
Спасибо! Извините за задержку - это сработало отлично! Мне не нравилось использовать первый foreach, но он работает! - person tzmatt7447; 04.09.2010

очень простой. у вас есть так называемый стандартный объект php. он доступен, как и любой другой объект в php, с помощью синтаксиса $object->property

поэтому вы можете перебирать его следующим образом: foreach($object as $property) или foreach($object as $prop_name => $prop_val), где вы можете получить доступ к свойствам с помощью $object->$prop_name.

person helle    schedule 31.08.2010
comment
Здравствуйте, не могли бы вы взглянуть на спецификацию проблемы, с которой я столкнулся? - person tzmatt7447; 31.08.2010

Если вы хотите сохранить класс для повторного использования в дальнейшем, вам лучше использовать serialize и unserialize()

person Lekensteyn    schedule 31.08.2010
comment
Этот комментарий объясняет причину использования сериализации/десериализации поверх var_export: nl2 .php.net/manual/en/function.var-export.php#94333 - person Lekensteyn; 31.08.2010

Получил хорошее решение для этого - имел stdClass, который содержал другие stdClases и массивы.

function cleanEveryElement($someStdClass) {
    foreach ($someStdClass as &$property) {        
        if ($property instanceof stdClass || is_array($property)) {
            $property = cleanEveryElement($property);
        }
    else {
        // Perform some function on each element, eg:
        $property = trim($property);
        }
    }
return $someStdClass;
}
person Silas Palmer    schedule 17.02.2014