Образование в вашем документе 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)
Хотя оба они действительны, по моему мнению, вам следует использовать массивы, они проще и более гибки для того, что вы хотите сделать.