访问多级 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));
使用循环:
function findInCollection($collection, $fieldToFind){
foreach($collection as $key => $subCollection) {
if ($key == $fieldToFind) {
return $subCollection;
}
if ( ! is_object($subCollection)) {
return null;
}
return findInCollection($subCollection, $fieldToFind);
}
}
但是请记住如果密钥剂量不存在,您可能会遇到非常棘手的问题。
我认为(显示没有帮助)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;
}
我收到了这个异常复杂的对象数组作为 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));
使用循环:
function findInCollection($collection, $fieldToFind){
foreach($collection as $key => $subCollection) {
if ($key == $fieldToFind) {
return $subCollection;
}
if ( ! is_object($subCollection)) {
return null;
}
return findInCollection($subCollection, $fieldToFind);
}
}
但是请记住如果密钥剂量不存在,您可能会遇到非常棘手的问题。
我认为(显示没有帮助)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;
}