Приведу пример задачи: работа с ВК-api, нужно посчитать все сообщения на стене пользователя а так же лайки, репосты и коментарии к ним.
Выход данных от вконтакте будет таким:
response: {
count: 116,
items: [{
id: 45570,
from_id: 1,
to_id: 1,
date: 1378763792,
post_type: 'post',
text: 'Новый рекорд посещаемости ВКонтакте — 50,9 миллионов человек за сутки. ВКонтакте — не только самая популярная, но и самая быстрорастущая социальная сеть в СНГ.',
attachments: [{
type: 'photo',
photo: {
id: 311071042,
album_id: -7,
owner_id: 1,
photo_75: 'http://cs410529.vk.me/v410529001/8d49/coiZZoy7SYQ.jpg',
photo_130: 'http://cs410529.vk.me/v410529001/8d4a/mSxjZD41M4c.jpg',
photo_604: 'http://cs410529.vk.me/v410529001/8d4b/duuBfAcNodU.jpg',
photo_807: 'http://cs410529.vk.me/v410529001/8d4c/2rDxQpNlYbY.jpg',
width: 609,
height: 422,
text: '',
date: 1378763539,
post_id: 45570,
access_key: '03c15a7bcd0a448dd8'
}
}],
post_source: {
type: 'vk'
},
comments: {
count: 0,
can_post: 0
},
likes: {
count: 1162,
user_likes: 0,
can_like: 1,
can_publish: 1
},
reposts: {
count: 138,
user_reposted: 0
}
}, { .... }]
где первое response->count - общее количество постов, далее перечисляются посты, их можно выводить максимум 100 за запрос, если я имею дело со стеной где posts <= 100 то все нормально, я foreach перебираю возвращенный массив и складываю лайки, репосты и коментарии. Если posts <= 200 то я могу сделать ещё одно условие, ну а если постов будет 1000+ то это уже как минимум 10 условии надо одинаковых, поэтому я и решил воспользоваться рекурсией, и вот беда, я не понимаю как данные в ней передавать дальше в рекурсию.
мой пример выглядел примерно так:
function getWall_posts($id, $offset, $data=Array('comments'=>0,'likes'=>0,'reposts'=>0))
{
$reply = json_decode(http_request('https://api.vk.com/method/wall.get?owner_id=' . $id . '&count=0&offset=' . $offset . '&filter=owner'));
if ( $reply->response[0] <= 100 && $reply->response[0] > 0 )
{
foreach($reply->response[1] as $k => $v)
{
if ( array_key_exists($k, $data) )
{
$data[$k] += $v->count;
}
}
}
else
{
// вот тут беда ваще.. не знаю как правильно это делать.
}
return $data;
}
если кто поможет или нормально намекнет как быть - респект и уважуха.