PHP анализирует многомерный объект stdclass с массивами
Я получаю доступ к веб-сервису wsdl с помощью php. Чтение отлично работает, но анализ результата кажется довольно сложным: я попытался выполнить var_dump(), чтобы понять, как выглядит результат. Это мой PHP-код, который я использую для изменения результата:
foreach($result as $var => $value) {
var_dump($value);
echo "<br />";
}
Вот что я получаю с этим:
object(stdClass)#3 (3) {
["Successful"]=> bool(true)
["MessageId"]=> string(0) ""
["MlsMessageText"]=> string(0) ""
}
object(stdClass)#4 (3) {
["RowCount"]=> int(3)
["ColumnCount"]=> int(3)
["Columns"]=> object(stdClass)#5 (1) {
["Column"]=> array(3) {
[0]=> object(stdClass)#6 (2) {
["Name"]=> string(5) "RowID"
["Rows"]=> object(stdClass)#7 (1) {
["string"]=> array(3) {
[0]=> string(5) "12001"
[1]=> string(5) "12002"
[2]=> string(5) "12003" } } }
[1]=> object(stdClass)#8 (2) {
["Name"]=> string(8) "PersonID"
["Rows"]=> object(stdClass)#9 (1) {
["string"]=> array(3) {
[0]=> string(11) "12033310001"
[1]=> string(11) "12033310002"
[2]=> string(11) "12033310003" } } }
[2]=> object(stdClass)#10 (2) {
["Name"]=> string(10) "PersonName"
["Rows"]=> object(stdClass)#11 (1) {
["string"]=> array(3) {
[0]=> string(10) "Jack Jones"
[1]=> string(11) "Jenifer Row"
[2]=> string(12) "Marin Banker" } } }
}
}
}
Это довольно сложный ответ, и я понятия не имею, как разобрать его в цикле. Наконец я хочу получить таблицу, содержащую данные.
Любая помощь очень ценится:)
3 ответа
Проблема в том, что они перенесли таблицу в column -> row
вместо row -> column
Вы можете сделать это, создав новую таблицу и перевернув столбцы и строки.
$table = array();
foreach ($result['xxx']->Columns->Column as $colnr => $coldata) {
foreach ($coldata->Rows->string as $rownr => $rowdata) {
$table[$rownr][$coldata->Name] = $rowdata;
}
}
print_r($table);
Btw, $result['xxx']
не будет работать, 'xxx'
следует заменить на правильный ключ.
Объекты доступны. Так что вы можете просматривать их с помощью foreach. Просто создайте рекурсивную функцию с циклом foreach. Вот так например:
function loop($input)
{
foreach ($input as $value)
{
if (is_array($value) || is_object($value))
loop($value);
else
{
//store data
echo $value;
}
}
}
У меня был похожий вопрос. Я получал результаты обратно из кода в форме JSON. Когда я использовал json_decode, я заметил через метод var_dump, что во время декодирования некоторые объекты были созданы внутри массива.
Var_dump, который вы видите ниже, для моего var
$result.
Если я хочу получить доступ к массиву "status" из моего var, я использовал следующее, которое работало просто отлично:)
$result[0]->status
Я хотел данные в том, у которого были результаты моего запроса.
array(1) {
[0]=>
object(stdClass)#3 (3) {
["status"]=>
string(9) "Connected"
["message"]=>
string(34) "Connected to database successfully"
["data"]=>
array(1) {
[0]=>
object(stdClass)#2 (10) {
["id"]=>
string(36) "cc569871-6544-11e3-945d-0e184c35292b"
["login_name"]=>
string(22) "tkamran@premierbpo.com"
["login_password"]=>
string(8) "Lead6291"
["notes"]=>
NULL
["created_by"]=>
string(7) "default"
["created_on"]=>
string(19) "2013-12-15 12:52:46"
["last_modified_by"]=>
string(7) "default"
["last_modified_on"]=>
string(19) "2013-12-15 12:52:46"
["is_current"]=>
string(3) "yes"
["is_active"]=>
string(3) "yes"
}
}
}
}