#php #api #soap
#php #API #soap
Вопрос:
Я извлекаю данные из soap api с помощью php. но не могу получить данные в массиве. Каждый раз, когда это выдает мне ошибку
Фатальная ошибка: невозможно использовать объект типа stdClass в качестве массива в
Объект stdClass (
[item] => Array ( [0] => stdClass Object ( [date] => 2008-07-17T01:23:06Z [directory] => 1 [downloadCount] => 0 [downloadLink] => http://www.example.com/folder/8ISxjbEs/_online.html [empty] => [id] => 8290268 [md5] => [name] => [parentId] => -1 [removed] => [shared] => [size] => 17 [version] => 0 ) [1] => stdClass Object ( [date] => 2009-11-03T23:03:15Z [directory] => [downloadCount] => 5 [downloadLink] => http://www.example.com/file/mIofv-vJ/MASTER-ACCOUNTS_3_Nov_2009.html [empty] => [id] => 146103085 [md5] => b073b9573227843e25d19e0e9e60ce80 [name] => MASTER-ACCOUNTS 3 Nov 2009.zip [parentId] => 8290268 [removed] => [shared] => [size] => 3401447 [version] => 0 ) ) )
Хорошо, я использую 4shared API.
// Учетные данные пользователя на 4shared
$user_login = "email_123@hotmail.com";
$user_password = "password";
$client = new SoapClient("https://api.4shared.com/jax2/DesktopApp?wsdl", array(
"cache_wsdl" => WSDL_CACHE_DISK,
"trace" => 1,
"exceptions" => 0
)
);
$client->yourFunction();
//Getting list of all folders
echo "<pre>";
$getAllItems = $client->getAllItems ($user_login, $user_password);
print_r ($getAllItems);
этот код печатает указанный выше объект stdClass. но я не могу преобразовать его в массив.
Комментарии:
1. Пожалуйста, опубликуйте код, используемый для получения и сохранения ответа SOAP.
2. Я добавил более подробную информацию, пожалуйста, проверьте это сейчас.
Ответ №1:
Вы пробовали конвертировать с помощью get_object_vars(); функция?
<?php
function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
?>
* Я знаю, что отвечать уже поздно, но я наткнулся на этот вопрос, когда искал решение своей проблемы, так что вот мои 2 цента 🙂
Ответ №2:
Вы можете попытаться преобразовать этот объект в массив:
class myClass {
...
}
$myobj = new myClass();
$myArrObj = (Array) $myobj;
Или вы можете попытаться выполнить итерацию по этому объекту и переместить все элементы в новый массив, используя get_object_vars