23 Stimmen

Wie man durch ein verschachteltes stdClass iteriert?

Ich habe ein Objekt wie dieses:

stdClass-Objekt
(
    [_count] => 10
    [_start] => 0
    [_total] => 37
    [values] => Array
        (
            [0] => stdClass-Objekt
                (
                    [_key] => 50180
                    [group] => stdClass-Objekt
                        (
                            [id] => 50180
                            [name] => CriticalChain
                        )

                )

            [1] => stdClass-Objekt
                (
                    [_key] => 2357895
                    [group] => stdClass-Objekt
                        (
                            [id] => 2357895
                            [name] => Data Modeling
                        )

                )

            [2] => stdClass-Objekt
                (
                    [_key] => 1992105
                    [group] => stdClass-Objekt
                        (
                            [id] => 1992105
                            [name] => SQL Server Users in Israel
                        )

                )

            [3] => stdClass-Objekt
                (
                    [_key] => 37988
                    [group] => stdClass-Objekt
                        (
                            [id] => 37988
                            [name] => CDO/CIO/CTO Leadership Council
                        )

                )

            [4] => stdClass-Objekt
                (
                    [_key] => 4024801
                    [group] => stdClass-Objekt
                        (
                            [id] => 4024801
                            [name] => BiT-HR, BI & IT Placement Agency
                        )

                )

            [5] => stdClass-Objekt
                (
                    [_key] => 37845
                    [group] => stdClass-Objekt
                        (
                            [id] => 37845
                            [name] => Israel Technology Group
                        )

                )

            [6] => stdClass-Objekt
                (
                    [_key] => 51464
                    [group] => stdClass-Objekt
                        (
                            [id] => 51464
                            [name] => Israel DBA's
                        )

                )

            [7] => stdClass-Objekt
                (
                    [_key] => 66097
                    [group] => stdClass-Objekt
                        (
                            [id] => 66097
                            [name] => SQLDBA
                        )

                )

            [8] => stdClass-Objekt
                (
                    [_key] => 4462353
                    [group] => stdClass-Objekt
                        (
                            [id] => 4462353
                            [name] => Israel High-Tech Group
                        )

                )

            [9] => stdClass-Objekt
                (
                    [_key] => 4203807
                    [group] => stdClass-Objekt
                        (
                            [id] => 4203807
                            [name] => Microsoft Team Foundation Server
                        )

                )

        )

)

Ich muss die ID und den Namen in einer HTML-Tabelle erhalten, aber anscheinend habe ich Schwierigkeiten, durch dieses Objekt zu iterieren. Danke im Voraus. Ich verstehe, dass ich zum Values Array und dann zum group-Objekt gelangen muss, aber ich stolpere über die Übergänge zwischen Objekt und Array sowie über foreach vs. indexbasierte Iteration.

Zum Beispiel habe ich Folgendes versucht:

foreach ($res as $values) { print "\n"; print_r ($values); } 

Es durchläuft das Objekt, gibt mir aber auch nutzlose Werte aus

10 0 37

28voto

adeneo Punkte 307329
echo ""

foreach ($object->values as $arr) {
    foreach ($arr as $obj) {
        $id   = $obj->group->id;
        $name = $obj->group->name;

        $html  = "";
        $html .=    "";
        $html .=    "";
        $html .= "";
    }
}

echo "Name : $nameId   : $id";

12voto

Adam Punkte 20147

Da dies das oberste Ergebnis in Google ist, wenn Sie nach über stdclass iterieren suchen, kann es hilfreich sein, die Frage im Titel zu beantworten:

Sie können einfach über eine stdclass iterieren, indem Sie foreach verwenden:

$user = new \stdClass();
$user->flag = 'rot';

foreach ($user as $key => $value) {
   // $key ist `flag`
   // $value ist `rot`
}

6voto

gus Punkte 61
function objectToArray( $data ) 
{
    if ( is_object( $data ) ) 
        $d = get_object_vars( $data );
}

Das Objekt zunächst in ein Array konvertieren, z.B.:

$ergebnisse = objectToArray( $ergebnisse );

und verwenden Sie

foreach( $ergebnisse as ergebnis ){... ...}

4voto

eladcm Punkte 534

Ich weiß, dass es ein alter Beitrag ist, aber zum Wohle anderer: beim Arbeiten mit stdClass sollten Sie Reflektionen verwenden:

  $obj = new ReflectionObject($object);

  $propeties = $obj->getProperties();

      foreach($properties as $property) {
        $name = $property->getName();  <-- dies ist die Reflektionklasse
        $value = $object->$name;       <--- $object ist Ihr Originalobjekt

            hier müssen Sie das Ergebnis behandeln (in Array speichern usw.)

        }

3voto

foreach($res->values as $value) {
    print_r($value);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X