2016-10-06 6 views
1

Ich habe dieses lächerlich komplexe Array von Objekten als SOAP-Antwort erhalten. Ich muss die "string_operator_collection" mit einer Schleife ausdrucken. Es ist eine Sammlung von Operatoren ähnlich zu ["equal_wild"], aber mit allen unterschiedlichen Namen. Die Verschachtelung ist so tief, dass ich mit normalen Methoden nicht darauf zugreifen kann. Irgendwelche Ideen bitte?Zugriff auf ein mehrstufiges stdClass-Objektfeld?

object(stdClass)#2 (1) { 
["get_search_frame_details_response"] 
=> object(stdClass)#3 (2) { 
    ["response_context"]=> object(stdClass)#4 (3) { 
     ["session_token"] 
     => string(28) "b0ac045931183d1ead6b9f6da061" 
     ["response_status"]=> string(2) "OK" 
     ["response_message"]=> string(0) "" } 
      ["search_frame_details_response_data"] 
      => object(stdClass)#5 (2) { 
       ["search_field_collection"]=> object(stdClass)#6 (1) { 
        ["search_field"]=> array(4) { 
        [0]=> object(stdClass)#7 (3) { 
         ["field_id"] 
         => string(82) 
         "OsCashAllocationCashAllocationPk" 
         ["field_name"]=> string(15) "Customer Number" 
         ["field_operator"] 
         => object(stdClass)#8 (1) { 
          ["string_operator_collection"] 
          => object(stdClass)#9 (16) { 
           ["equal_wild"]=> string(2) "=*" 

My best effort so weit ist:

get_search_frame_details_response-> 
    search_frame_details_response_data-> 
    search_field_collection->search_field; 

    print_r(array_values($search_frame_op1)); 
+0

schreiben Natürlich können Sie 'normale Methoden' verwenden !!!! Sie müssen nur etwas Zeit damit verbringen, es auszuarbeiten – RiggsFolly

+0

Ich persönlich finde eine 'print_r()' Ausgabe einfacher zu folgen, versuchen Sie es, posten Sie es, wenn Sie immer noch nicht arbeiten können – RiggsFolly

+0

Der Einzug, mit dem es hier gepostet wird, ist wild. Es macht es sehr schwierig, visuell zu analysieren. Wenn Sie dies im Browser mit 'var_dump()' ablegen, sehen Sie sich die Seitenquelle an und kopieren Sie sie genau so, wie sie dort erscheint. 'print_r()' wird etwas weniger laut und einfacher zu lesen sein. –

Antwort

0

denke ich (Anzeige nicht hilfreich ist) die Adresse des string_operator_collection ist

$obj 
->get_search_frame_details_response 
->search_frame_details_response_data 
->search_field_collection 
->search_field[] 
->field_operator 
->string_operator_collection 
->equal_wild 

So wie das Array an

beginnt
$obj 
->get_search_frame_details_response 
->search_frame_details_response_data 
->search_field_collection 
->search_field[]; 

können wir eine Schleife wie diese

$the_array = $obj 
       ->get_search_frame_details_response 
       ->search_frame_details_response_data 
       ->search_field_collection 
       ->search_field; 

foreach($the_array as $field) { 
    echo $field 
      ->field_operator 
      ->string_operator_collection 
      ->equal_wild; 
} 
+0

Ich werde versuchen, so gut wie Sie in Zukunft zu formatieren. Deine Antwort ist brillant. Machst du eine Beratung? Top Antwort. –

+0

@RobertMorel Wenn Sie fragen, ob ich vorübergehend beschäftigt werden kann, ist die Antwort JA – RiggsFolly

+0

Ehrfürchtig, ich werde warten, um von Ihnen zu hören. –

0

Mit Schleife:

function findInCollection($collection, $fieldToFind){ 
    foreach($collection as $key => $subCollection) { 
     if ($key == $fieldToFind) { 
      return $subCollection; 
     } 

     if (! is_object($subCollection)) { 
      return null; 
     } 

     return findInCollection($subCollection, $fieldToFind); 
    } 
} 

Aber erinnern, dass Sie wirklich harte Probleme haben können, wenn Schlüssel Dosis nicht vorhanden ist.

+0

Danke, aber es funktioniert nicht wirklich gut in diesem speziellen Fall. –

+0

Warum? Rekursion muss in jedem Fall gut funktionieren. – astratyandmitry

Verwandte Themen