访问一个多级stdClass对象字段


Access a Multiple level stdClass object field?

作为SOAP响应,我收到了这个异常复杂的对象数组。我需要使用循环打印出"string_operator_collection"。它是一个类似于["equal_wild"]的操作符集合,但具有不同的名称。嵌套是如此之深,以至于我似乎无法使用正常的方法进行访问。有什么想法吗?

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));

我认为(显示没有帮助)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;
}

Using loop:

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

但是请记住如果key不存在,您可能会遇到真正困难的问题。