Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420

Как получить значение из объекта класса stdClass?

27.10.2015, 15:39. Показов 3822. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Я обращаюсь к web-службе и получаю объект класса stdClass:
PHP
1
2
$client = new SoapClient('http://localhost:8089/IMSToWebProxy2?wsdl');
$result = $client->GetDoctorSpecialities(array('reception_place_id'=>1, 'reception_by_tickets_only'=>true));
Метод в web-службе возвращает массив объектов, но мне по сути нужно просто получить список строк из него.
Я преобразовывал свою переменную $result в массив и пробовал вывести его:
PHP
1
2
$array = (array)$result;
print_r(array_values($array));
Выводит, но делает это не корректно, вот так:
Кликните здесь для просмотра всего текста

Array ( [0] => stdClass Object ( [IDStringPair] => Array ( [0] => stdClass Object ( [ID] => 33 [Value] => гинеколог ) [1] => stdClass Object ( [ID] => 23 [Value] => дерматолог ) [2] => stdClass Object ( [ID] => 64 [Value] => дерматолог отд.проф. ) //ну и так далее

Мне нужны только специальности врачей. Как сделать вывод адекватным?

Добавлено через 5 минут
P.S. Да, мне бы очень желательно выводить столбиком, так что здесь наверное без цикла никак, да?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2015, 15:39
Ответы с готовыми решениями:

Получить значение из объекта класса
print_r($object); Выводит: Array ( => parser Object ( => Array ( => 1 ) => Array ( => Array ( => Текст,Текст как получить...

Как получить адрес определенного объекта класса?
Пользуюсь RAD Studio XE2. Задача определить адрес объекта (в данном случае int) VisibleColCount в классе TValueListEditor. Казалось бы...

Как получить доступ к переменным объекта класса-родителя?
Я знаю, что обычно передают указатель на объект класса в функцию чайлда, но вот как это сделать на ObjC никак не могу понять. ...

5
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
27.10.2015, 16:12
Наверно как-то так:
PHP
1
2
3
4
5
6
7
8
9
<?
$array = (array)$result;
 
foreach($array as $obResult) {
    foreach($obResult->IDStringPair as $arResult)
        foreach($arResult as $object)
            echo nl2br($object->Value . PHP_EOL);
 
?>
Но лучше сразу после строки
PHP
1
$result = $client->GetDoctorSpecialities(array('reception_place_id'=>1, 'reception_by_tickets_only'=>true));
сделайте print_r($result); и покажите всю структуру данных
0
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
27.10.2015, 16:16  [ТС]
LASSO, выдал пустоту, которую, внезапно, можно выделить.

при использовании print_r выдал это:
Кликните здесь для просмотра всего текста

stdClass Object ( [GetDoctorSpecialitiesResult] => stdClass Object ( [IDStringPair] => Array ( [0] => stdClass Object ( [ID] => 33 [Value] => гинеколог ) [1] => stdClass Object ( [ID] => 23 [Value] => дерматолог ) [2] => stdClass Object ( [ID] => 64 [Value] => дерматолог отд.проф. ) [3] => stdClass Object ( [ID] => 39 [Value] => Доверенный врач ЧАЭС ) [4] => stdClass Object ( [ID] => 69 [Value] => заведующий отд.лучевой диагностики ) [5] => stdClass Object ( [ID] => 10 [Value] => кардиолог ) [6] => stdClass Object ( [ID] => 11 [Value] => невролог ) [7] => stdClass Object ( [ID] => 56 [Value] => невролог по м/о ) [8] => stdClass Object ( [ID] => 6 [Value] => окулист ) [9] => stdClass Object ( [ID] => 2 [Value] => онколог ) [10] => stdClass Object ( [ID] => 12 [Value] => отоларинголог ) [11] => stdClass Object ( [ID] => 57 [Value] => отоларинголог проф.отд. ) [12] => stdClass Object ( [ID] => 25 [Value] => пульмонолог ) [13] => stdClass Object ( [ID] => 16 [Value] => стоматолог ) [14] => stdClass Object ( [ID] => 1 [Value] => терапевт ) [15] => stdClass Object ( [ID] => 38 [Value] => Терапевт по беременным ) [16] => stdClass Object ( [ID] => 5 [Value] => травматолог ) [17] => stdClass Object ( [ID] => 3 [Value] => уролог ) [18] => stdClass Object ( [ID] => 37 [Value] => фельдшер ) [19] => stdClass Object ( [ID] => 4 [Value] => хирург ) [20] => stdClass Object ( [ID] => 15 [Value] => хирург-стоматолог ) [21] => stdClass Object ( [ID] => 22 [Value] => цеховой терапевт ) [22] => stdClass Object ( [ID] => 7 [Value] => эндокринолог ) ) ) )
0
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
27.10.2015, 16:24
Лучший ответ Сообщение было отмечено FaceHoof как решение

Решение

Тогда так:

PHP
1
2
3
$result = $client->GetDoctorSpecialities(array('reception_place_id'=>1, 'reception_by_tickets_only'=>true));
foreach($result->GetDoctorSpecialitiesResult->IDStringPair as $object)
    echo nl2br($object->Value . PHP_EOL);
1
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
27.10.2015, 16:44  [ТС]
LASSO, большое спасибо, то что надо!
Но не могли бы вы объяснить мне этот цикл? Почему IDStringPair, а не Value?, почему мы вообще получаем свойство объекта через метод (это ведь происходит?), в общем, полностью эти две строки объясните, если не сложно
0
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
11.11.2015, 10:21  [ТС]
Внезапно всплыла ещё проблема по этой же теме...
Работаю по тому же принципу: Обращаюсь к службе, получает объект, достаю из него что нужно (так же вывожу структуру объекта):
PHP
1
2
3
4
5
6
7
8
9
$result = $client->GetAvailableTicketsForDate(array('doctor_id'=>$_SESSION['DoctorID'], 'date'=>$_GET[DateTicket], 'statusName'=>'Internet'));  
        print_r($result);
        foreach($result->GetAvailableTicketsForDateResult->DoctorTicket as $object)
        {           
                $TimeAndDate = $object->ReceptionDateTime; 
                echo "<br>ДАТА И ВРЕМЯ: ".$object->ReceptionDateTime;
                $Time = substr($TimeAndDate, strrpos($TimeAndDate, 'T')+1);
                echo "<a href='Identificate.php?TimeTicket=$Time&ID=$object->ID&IsReserved=$object->StatusMask'>".nl2br($Time . PHP_EOL)."</a>";    
        }
Если объектов получено два или более, то вывод правильный:
Кликните здесь для просмотра всего текста

stdClass Object ( [GetAvailableTicketsForDateResult] => stdClass Object ( [DoctorTicket] => Array ( [0] => stdClass Object ( [DoctorID] => 431 [ID] => 2495119 [ReceptionDateTime] => 2015-11-25T10:00:00 [StatusMask] => 78 ) [1] => stdClass Object ( [DoctorID] => 431 [ID] => 2495126 [ReceptionDateTime] => 2015-11-25T11:10:00 [StatusMask] => 78 ) ) ) )
ДАТА И ВРЕМЯ: 2015-11-25T10:00:0010:00:00

ДАТА И ВРЕМЯ: 2015-11-25T11:10:0011:10:00

Но если он всего один, то получается бред:
Кликните здесь для просмотра всего текста

stdClass Object ( [GetAvailableTicketsForDateResult] => stdClass Object ( [DoctorTicket] => stdClass Object ( [DoctorID] => 431 [ID] => 2495126 [ReceptionDateTime] => 2015-11-25T11:10:00 [StatusMask] => 78 ) ) )
ДАТА И ВРЕМЯ:

ДАТА И ВРЕМЯ:

ДАТА И ВРЕМЯ:

ДАТА И ВРЕМЯ:

Цикл отрабатывает аж четыре раза, но ничего не выводит. Что я делаю не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.11.2015, 10:21
Помогаю со студенческими работами здесь

Как из одного объекта получить объект другого класса?
Форумчане, подскажите. У меня есть два класса: class Category{ private $id = ''; private $parentId = ''; private...

Как получить полный адрес по имени поля объекта класса
как получить полный адрес по имени поля объекта класса ? не пересчитывая размер расположенных до него полей от начала объекта

Как получить значение свойства объекта?
вопрос в следующем $client = new...

Как получить доступ к методам объекта класса наследуемого от Activity, когда он выводится во вкладку
В главном Активити создаются вкладки на котовые выводятся другие активити. @Override public void onCreate(Bundle...

Как получить значение свойства объекта в переменную?
var_dump($obj); Выводит: object(SimpleXMLElement)#338 (1) { =&gt; string(6) &quot;0.1818&quot; } Как передать это число &quot;0.1818&quot; в отдельную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru