如何迭代PHP中的stdObject元素数组?

时间:2010-08-31 07:38:12

标签: php object foreach stdclass

这是我需要通过foreach循环访问的数据结构的print_r()版本:

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

            [1] => stdClass Object
                ( 
...

现在,我如何迭代这些对象?

我能感觉到我应该这样做:

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

但是如何将它放在foreach类型循环中!!

4 个答案:

答案 0 :(得分:1)

似乎在那个对象中有多个对象..你可能需要做更多的foreach循环.. 这段代码可以让你获得该对象中的第一个sessionId。

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

    }
}

运行此代码以更清晰的方式查看obj:
echo '<pre>'; print_r($detailsresponses); exit;

用正确的变量名称替换'$ detailedresponses'并将其发回此处,它应该使事情更容易阅读。

修改
看看这个URL,我把我的测试数据放在那里: http://pastie.org/1130373

我重新创建了你正在获取的对象并在其中添加注释,以便您可以了解正在发生的事情:)

AND,你可以得到这样的属性:

echo $object->DetailedResponse[0]->sessionId;

答案 1 :(得分:0)

很简单。你有一个所谓的php标准对象。 它可以通过$object->property语法

访问php中的任何其他对象

所以你可以这样迭代: foreach($object as $property)foreach($object as $prop_name => $prop_val) 您可以通过$object->$prop_name访问属性。

答案 2 :(得分:0)

如果您想保存课程,以便日后重新使用,最好使用serializeunserialize()

答案 3 :(得分:0)

有一个很好的解决方案 - 有一个包含其他stdClases和数组的stdClass

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