2013-07-06 3 views
1

Я пытаюсь сохранить FBID друзей пользователя Facebook в столбце базы данных mysql. Я попытался найти другой ответ по этому вопросу, и я попытался его реализовать (в Laravel 4). Вот что я сделал:Недопустимый аргумент, предоставленный foreach(), распаковывающий массив Facebook в Laravel 4

В файле Facebook.php, один из поставщиков:

'friends' => 'https://graph.facebook.com/me/friends?access_token='.$token->access_token 

В моей oauth2 контроллер:

$friends_list = $user['friends']; 
$friends_list_array = json_decode($friends_list,true); 
$arr= $friends_list_array['data']; 
$friend_ids_arr = array(); 
foreach($arr as $friend) { 
    $friend_ids_arr[] = $friend['id']; 
} 
$friend_ids = implode("," , $friend_ids_arr); 

И тогда я хочу, чтобы сохранить $ friend_ids в столбце "text" в моей базе данных. Тем не менее, при выполнении этого я продолжаю получать ошибку: Invalid argument supplied for foreach()

Но он очень четко снабжен массивом, как должен. Что-то я не вижу? Спасибо за помощь.

ответ

0

На самом деле возвращаемый результат является json, возвращаемый объект должен выглядеть как этот

{ 
    "id": "xxxxxxx", 
    "name": "Sheikh Heera", 
    "friends": { 
     "data": [ 
      { "name": "RaseL KhaN", "id": "xxx" }, 
      { "name": "Yizel Herrera", "id": "xxx" } 
     ], 
     "paging": { 
     "next": "https://graph.facebook.com/xxx/friends?limit=..." 
     } 
    } 
} 

После json_decode

$user = json_decode($user, true); 

Это должно выглядеть что-то вроде

Array 
(
    [id] => xxxxxxx 
    [name] => Sheikh Heera 
    [friends] => Array 
    (
     [data] => Array 
      (
       [0] => Array 
        (
         [name] => RaseL KhaN 
         [id] => xxx 
        ) 

       [1] => Array 
        (
         [name] => Yizel Herrera 
         [id] => xxx 
        ) 

      ) 

     [paging] => Array 
      (
       [next] => https://graph.facebook.com/xxx/friends?limit=... 
      ) 

    ) 

) 

Так , теперь вы можете

$friends_list = $user['friends']; 
$data = $friends_list['data']; 

Убедитесь, что $data массив не пуст, а затем цикл

if(count($data)) { 
    $friend_ids_arr = array(); 
    foreach($data as $friend) { 
     $friend_ids_arr[] = $friend['id']; 
    } 
} 

Таким образом, foreach будет работать только тогда, когда $data имеет элементы в нем.

Update: Это может помочь вам

$url = "https://graph.facebook.com/me?fields=id,name,friends&access_token=YOUR_ACCESS_TOKEN"; 
$contents = json_decode(file_get_contents($url), true); 
$friends = $contents['friends']; 
$friend_ids_arr[] 
foreach($friends['data'] as $friend) 
{ 
    $friend_ids_arr[] = $friend['id']; 
} 
+0

Это ошибка говорит: Нелегальная строка офсетные «данные» – user1072337

+0

Затем убедитесь, что '$ пользователей [«друзей»] 'не пуст, попробуйте' var_dump ($ пользователей [ 'друзей']) '. –

+0

Он определенно не пуст, он просто возвращает URL-адрес. Поэтому, если я перейду к графическому url с соответствующим токеном доступа, он перечисляет все это. Как получить только часть данных из графика ulr? – user1072337

Смежные вопросы