您好我有一个被调用的对象,其中一些对象包含其他对象,我使用foreach遍历每个属性将其放入一个新数组并在foreach中使用if语句来查看是否property包含另一个对象,如果它使用另一个foreach来获取object属性中对象的属性。
问题是,一旦我得到2级深度它就会崩溃我知道内部有一个对象通过执行is_object测试返回true但是当我尝试travesere它的属性时它只是没有得到任何信息
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;
}
提前感谢您的帮助。
答案 0 :(得分: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;
}
希望我能够提供帮助! =)