Я пытаюсь получить информацию об образовании из графического API-интерфейса Facebook, используя stdclass. вот массив:
"username": "blah", "education": [ { "school": { "id": "[removed]", "name": "[removed]" }, "year": { "id": "[removed]", "name": "[removed]" }, "type": "High School" }, { "school": { "id": "[removed]", "name": "[removed]" }, "year": { "id": "[removed]", "name": "[removed]" }, "type": "College" } ],
Как я могу использовать PHP, чтобы выбрать тот, у кого есть тип «колледж»? Вот что я использую для чтения:
$token_url = "https://graph.facebook.com/oauth/access_token?" . "client_id=[removed]&redirect_uri=[removed]&client_secret=[removed]&code=".$_GET['code'].""; $response = file_get_contents($token_url); parse_str($response); $graph_url = "https://graph.facebook.com/me?access_token=" . $access_token; $user = json_decode(file_get_contents($graph_url));
Таким образом, имя будет $ user-> name.
Я попробовал школу $ user-> education->, но это не сработало.
Любая помощь будет оценена по достоинству.
Благодаря!
Образование в вашем документе JSON представляет собой массив (обратите внимание, что его элементы окружены [] ), поэтому вам нужно сделать следующее:
// To get the college info in $college $college = null; foreach($user->education as $education) { if($education->type == "College") { $college = $education; break; } } if(empty($college)) { echo "College information was not found!"; } else { var_dump($college); }
Результатом будет что-то вроде:
object(stdClass)[5] public 'school' => object(stdClass)[6] public 'id' => string '[removed]' (length=9) public 'name' => string '[removed]' (length=9) public 'year' => object(stdClass)[7] public 'id' => string '[removed]' (length=9) public 'name' => string '[removed]' (length=9) public 'type' => string 'College' (length=7)
Более простым способом было бы использовать json_decode со вторым параметром, установленным в true, что заставляет результаты быть массивами, а не stdClass.
$user = json_decode(file_get_contents($graph_url), true);
Если вы переходите с массивами, вам нужно изменить поиск колледжа foreach:
foreach($user["education"] as $education) { if($education["type"] == "College") { $college = $education; break; } }
и результатом будет:
array 'school' => array 'id' => string '[removed]' (length=9) 'name' => string '[removed]' (length=9) 'year' => array 'id' => string '[removed]' (length=9) 'name' => string '[removed]' (length=9) 'type' => string 'College' (length=7)
Хотя оба действительны, на мой взгляд, вы должны использовать массивы, они легче и гибче для того, что вы хотите сделать.