1

こんにちは私は呼び出されているオブジェクトがあり、それらのオブジェクトのいくつかには他のオブジェクトが含まれています。foreachを使用して各プロパティを調べて新しい配列に入れ、foreach内でifステートメントを使用してプロパティに別のオブジェクトが含まれているかどうかを確認していますオブジェクト、およびオブジェクトプロパティ内のオブジェクトのプロパティを取得するために別のforeachを使用する場合。

問題は、2レベルの深さになると、それが崩壊することです。is_objectテストを実行してtrueを返すことにより、内部にオブジェクトがあることがわかりますが、そのプロパティをトラベスレートしようとすると、情報が得られません。

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 に答える