Данные Soap выдают фатальную ошибку: невозможно использовать объект типа stdClass в качестве массива в

#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 цента 🙂

http://www.if-not-true-then-false.com/2009/php-tip-convert-stdclass-object-to-multidimensional-array-and-convert-multidimensional-array-to-stdclass-object/

Ответ №2:

Вы можете попытаться преобразовать этот объект в массив:

 class myClass {
...
}
$myobj = new myClass();
$myArrObj = (Array) $myobj;
  

Или вы можете попытаться выполнить итерацию по этому объекту и переместить все элементы в новый массив, используя get_object_vars