Доступ к многомерному stdClassObject - Array - PullRequest
0 голосов
/ 24 мая 2019

Я хочу получить доступ к свойствам массива, которые я получаю как SOAP-Resonse с сервера. Я использую 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
                        (
                        )

                )                                   

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

У вас есть массив массивов объектов, поэтому для доступа к ним вам нужно использовать $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 в зависимости от того, что вам нужно

0 голосов
/ 24 мая 2019

Посмотрев на результат, вы можете попробовать это?

// assuming $array is the array that you described

$tid = ($array[0])->tid;

, поскольку $ array - это массив объектов, поэтому я предполагаю, что получить данные так же просто, как использовать средство доступа к свойству ->. так что $ tid

вы можете узнать больше об объектах php здесь

надеюсь, это поможет!

- РЕДАКТИРОВАТЬ -

должно быть ($array[1][0])->tid. Потому что $ array [0] пусто. Вы можете использовать PHP array_filter, чтобы удалить все пустые массивы в массиве $.

$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'

дайте мне знать, если он все еще не работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...