Например запрос вроде

$request = new FacebookRequest($session, 'GET','/me/accounts?fields=id,name,access_token');
$response = $request->execute();
$arrayResult = $response->getGraphObject()->asArray();
print_r($arrayResult);

Возвращается

Array ( 
    [data] => Array ( 
        [0] => stdClass Object ( 
            [id] => 01010011100001111000111 #it's a fake id 
            [name] => MyAwesomePageName    #And a fake name 
        ) 
    ) 
    [paging] => stdClass Object ( 
        [next] => https://graph.facebook.com/v2.0/01010011100001111000111/accounts?fields=id,name&access_token=RanDoMAndFaaKKeEACCessToKen&limit=5000&offset=5000&__after_id=enc_IdOnOTKnoWWhAtThiSIs 
    ) 
)

Вот это. Я хотел бы получить весь ответ в массиве и без этих объектов stdClass. Как и в предыдущей версии их api. Спасибо.

1
user7543 22 Май 2014 в 19:28

4 ответа

Лучший ответ

Как вы обнаружили, метод asArray () в Facebook SDK ограничен. Однако вы можете вручную преобразовать объект в массив с помощью функции get_object_vars( $object );. В вашем примере вы можете сделать что-то вроде:

$array = get_object_vars( $arrayResult['data'][0] );

Это преобразует объект страницы в массив. Функция не рекурсивна, поэтому вам нужно преобразовать каждый объект в массив.

Вы можете использовать такую ​​рекурсивную функцию:

function object_to_array($obj) {
    $arr = array();
    if($obj instanceOf GraphObject){
        if(is_scalar($obj->asArray()) ) 
            $arr = $obj->asArray();
        else{
            foreach ($obj->getPropertyNames() as $propName) {
                $arr[$propName] = object_to_array($obj->getProperty($propName));
            }
        }
    }else if(is_array($obj)){
        foreach ($obj as $propKey => $propValue) {
            $arr[$propKey] = object_to_array($obj[$propValue]);
        }
    }else $arr = $obj;
    return $arr;
}
3
user7543 27 Май 2014 в 10:24

Более простой способ - получить необработанный JSON из $ response и самостоятельно его декодировать:

$request = new FacebookRequest($session, 'GET', '/me/accounts?fields=id,name,access_token');
$response = $request->execute();
$array = json_decode($response->getRawResponse(), true);
print_r($array);

Обновить

Начиная с PHP SDK 5.0+, вы можете использовать getDecodedBody() на FacebookResponse (выполняет декодирование JSON за вас и возвращает массив).

$fb = new Facebook([...]);
$response = $fb->get('/me', '{access-token}');
$array = $response->getDecodedBody();
8
Tama 25 Янв 2017 в 08:27

Просто используйте json_decode($arrayResult), чтобы получить вывод JSON. Результат, который вы получаете, - это просто структура данных php.

0
chopper 28 Окт 2014 в 21:21

Мы можем просто выполнить json_encode и декодировать как массив

$arrayResult = json_decode(json_encode($appreq['data'][0]),true);

Образец вывода

Array
(
[application] => Array
    (
        [name] => Test App
        [namespace] => app-test-app
        [id] => 988798798798
    )
[created_time] => 2015-02-17T08:42:14+0000
[data] => action=acceptit
[from] => Array
    (
        [id] => 987989798
        [name] => TestUser
    )

[message] => I have sent 1 Request
[to] => Array
    (
        [id] => 98098090
        [name] => NameAjax
    )

[id] => 345423452345_34523452453
)
0
Ajaxmint 17 Фев 2015 в 09:05