[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: рекурсия с сохранением данных
r3al
Привет, беда такая: не умею юзать рекурсию для выполнения запросов =\ Я не буду приводить тот код которым я пытался заставить работать так как мне хочется, потому что это не получилось, да и че лишний раз позориться.

Приведу пример задачи: работа с ВК-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;
}


если кто поможет или нормально намекнет как быть - респект и уважуха.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.