Вы можете отфильтровать пустые объекты.
$data = array_values(array_filter($data, function($item) {
return (bool) (array) $item;
}));
array_values
необходим для предотвращения получения формы {"0":{"id":2088996538},"2":{"id":2077495673}}
, поскольку он переиндексирует массив.
Промежуточное приведение к массиву в обратном вызове необходимо, потому что любой объект оценивается как истина, независимо от того, пустой он или нет, но пустой массив будет оцениваться как ложь. Если вы декодируете в массивы вместо объектов, устанавливая для второго параметра json_decode
значение true, это приведение не требуется.
Не имеет прямого отношения к исходному вопросу, но я предлагаю другой способ сделать это, начиная с данных из API:
$activities = json_decode($json, true);
$set_keys = array_flip(["start_latlng", "id", "start_date","name"]);
foreach ($activities as $activity) {
if (!is_null($activity['start_latlng'])) {
$result[] = array_intersect_key($activity, $set_keys);
}
}
echo json_encode($result);