2016-10-06 5 views
1

나는이 엄청나게 복잡한 객체 배열을 SOAP 응답으로 받았습니다. 루프를 사용하여 "string_operator_collection"을 인쇄해야합니다. [ "equal_wild"]와 비슷하지만 이름이 다른 연산자 모음입니다. 중첩이 너무 깊어서 정상적인 방법으로는 액세스 할 수없는 것처럼 보입니다. 어떤 아이디어라도 제발?여러 수준의 stdClass 개체 필드에 액세스 하시겠습니까?

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) "=*" 

내 최선의 노력은 지금까지입니다 :

get_search_frame_details_response-> 
    search_frame_details_response_data-> 
    search_field_collection->search_field; 

    print_r(array_values($search_frame_op1)); 
+0

같은 루프를 쓸 수있을 것 같아요 당신은'정상적인 방법'을 사용할 수 있습니다! 그냥 약간의 시간을 보내면된다. – RiggsFolly

+0

나는 개인적으로'print_r()'출력을 따라하기 쉽다. 아직 시도해 볼 수 없다면 게시해라. – RiggsFolly

+0

여기에 게시 된 들여 쓰기는 자연 스럽다. 시각적으로 분석하기가 어렵습니다. 브라우저에서 이것을'var_dump()'로 덤핑한다면, 페이지 소스를보고 그곳에 나타나는 것과 똑같이 복사하십시오. 'print_r()'은 시끄럽지 않고 읽기 쉽습니다. –

답변

0

나는 (디스플레이가 도움이되지 않습니다) string_operator_collection의 주소 그래서

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

인 배열이

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

시작으로 우리는이

$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

나는 장래에 당신처럼 멋지게 포맷하려고 노력할 것입니다. 당신의 대답은 훌륭합니다. 컨설팅을하고 있습니까? 최고 대답. –

+0

@RobertMorel 임시 고용인이 될 수 있는지 묻는다면 대답은 YES입니다 – RiggsFolly

+0

굉장합니다, 연락을 기다리고 있습니다. –

0

사용 루프 :

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

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

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

그러나 키 용량 없음이 존재하는 경우에 당신이 정말 열심히 문제가있을 수 있습니다을 기억한다.

+0

감사합니다. 그러나이 특별한 경우에는 실제로 잘 작동하지 않습니다. –

+0

왜? 재귀는 어떤 경우에도 잘 작동해야합니다. – astratyandmitry

관련 문제