1

嗨,我有一个正在调用的对象,其中一些对象包含其他对象,我正在使用 foreach 遍历每个属性以将其放入一个新数组中,并在 foreach 中使用 if 语句来查看该属性是否包含另一个对象,如果它确实使用另一个 foreach 来获取对象属性中的对象属性。

问题是,一旦我进入 2 个级别,它就会崩溃,我知道通过执行返回 true 的 is_object 测试里面有一个对象,但是当我尝试遍历它的属性时,它只是没有从中获取任何信息。

private static function prepare_page($output_object) {
    foreach ($output_object as $object) {

    if (is_a($object, "subjects")) {
        $return_object["{{::SUBJECT::}}"] = $object->name;
    }

    if (is_a($object, "posts")) {
        $return_object["{{::POST::}}"] = $object->name;

        foreach ($object as $atribute => $value) {

            if (is_object($value) || is_array($value)) {

                foreach ($object as $property => $val) {

                    if (is_object($val)) {

                        echo "It's an object inside an object";
                            dump($val);
                            //works till here lets me know its an object and shows the $val with its contents (objects)

                            foreach ($val as $ob => $at) {
                                //breaks down here if i dump the $ob or $at it doesn't do anything      
                                if (!is_object($at)) {
                                    $return_object["{{::>>".strtoupper($ob)."::}}"] = $at;
                                } else {
                                    //  repeat process
                                }
                            }
                    } else {
                        $return_object["{{::==".strtoupper($property)."::}}"] = $val;
                    }

                }
            } else {
                if (!is_object($value) && !is_array($value)) {
                    $return_object["{{::".strtoupper($atribute)."::}}"] = $value;
                } 
            }
        }
    }
}
return $return_object;
}

提前感谢您的帮助。

4

1 回答 1

1

好吧,我可能是错的,但我相信这里的问题是你如何处理对象。

你看,如果对象是对象而不是数组,is_object() 返回 true。foreach 循环适用于数组,但不适用于对象。

为了让它工作,您可能必须首先将您的对象转换为数组。

你为什么不尝试这样做:

foreach ($val as $ob => $at) {

调用函数将其转换为数组,如下所示:

$val = object_to_array($val);
foreach ($val as $ob => $at) {

然后在代码中的某处声明该函数,在所有循环结构之外。函数如上:

function object_to_array($object) {
    $array = array();
    if (is_object($object)) {
        $array = get_object_vars($object);
    }
    return $array;
}

希望我能提供帮助!=)

于 2012-06-22T20:27:33.637 回答