我想访问从服务器作为SOAP响应获得的数组属性。我使用php soapclient并在使用时得到以下输出
$response = $client->$action($clientID);
$array = json_decode(json_encode($xml), True);
不幸的是,我无法访问'tid','answer'等属性。我该怎么做(我可以在导入结果的地方使用php或c#)
Array
(
[0] => Array
(
)
[1] => Array
(
[0] => stdClass Object
(
[tid] => 4103
[tdid] => 191
[qid] => 4103-1
[question] => Wie würden Sie Ihren Gesundheitszustand im Allgemeinen beschreiben ?
[answer] => Ausgezeichnet.
[score] => 100
[date] => 1558593404
[Fields] => Array
(
)
)
[1] => stdClass Object
(
[tid] => 4103
[tdid] => 191
[qid] => 4103-2
[question] => Im Vergleich zum vergangenen Jahr, wie würden Sie Ihren derzeitigen Gesundheitszustand beschreiben ?
[answer] => Derzeit etwas besser als vor einem Jahr.
[score] => 75
[date] => 1558593404
[Fields] => Array
(
)
)
答案 0 :(得分:0)
通过查看结果,您可以尝试一下吗?
// assuming $array is the array that you described
$tid = ($array[0])->tid;
因为$ array是一个对象数组,所以我假设获取数据就像使用属性访问器->
一样简单。所以$ tid
您可以了解有关php对象here
的更多信息希望有帮助!
-编辑-
它应该是($array[1][0])->tid
。因为$ array [0]为空。您可以使用PHP的array_filter删除$ array中的所有空数组。
$filtered_array = array_filter($array, function($el){
return count($el) > 0;
});
$filtered_array
中只能包含非空数组。但请注意,array_filter保留了数组键。
然后,您可以使用foreach循环获取所有对象。
// say you want to put all tids in an array
$array_of_tids = [];
foreach($filtered_array as $array_of_objects){
foreach($array_of_objects as $response_objects){
$array_of_tids[] = $response_objects->tid;
}
}
更简单但更不可靠(因为我不知道API响应的一致性),将仅使用索引。
$tid_of_first_object = ($array[1][0])->tid
// $tid_of_first_object would be '4103'
让我知道它是否仍然无法正常工作!
答案 1 :(得分:0)
您有一组对象数组,因此要访问它们,您需要使用$array[index/key][index/key]
直到达到对象所在的级别,然后使用[]->
进行访问。
您大概要循环遍历,因此在循环中您需要进行一些检查,例如is_array
,isset
,is_object
或count
才能看到如果有任何事情要做,它将看起来像这样:
foreach($result as $arr) {
if(count($arr) < 1) continue;//there are no entries in this array
foreach($arr as $obj) {
if(isset($obj->tid)) {
//do your stuff
}
}
}
如果您只需要提示,则可以通过使用array_column
提取所有数据来简化此操作,这取决于您的目标-但这应该为您设定正确的方向。您还可以根据需要查看array_map