AllDecay
@AllDecay
Вечно отдыхающий.

Как сделать перебор значений массива до верного условия?

Вообщем, написал скрипт, выполняющий репосты из групп ВКонтакте по расписанию(1 запись из каждой группы каждый день). Позже заметил, что не всегда выполняются репосты из групп. Решил пересмотреть код и вот что заметил:
Берется рандомный элемент массива (запись со стены) и проверяется на условия. Все верно - делаем репост.
Так вот, как сделать так, чтобы эти условия проверялись до того, как выберется рандомный элемент массива (пост). Дабы сразу выбирать пост из уже проверенных и проходящих по условию. Вот мой код, который на данный момент пропускает репосты:
while($row = $qwe->fetch()) {
	$wall = file_get_contents("https://api.vk.com/method/wall.get?v=5.4&filter=owner&count=1000&owner_id=-".$row['id']);
	$wall = json_decode($wall);
	$wall = $wall->response->items;
	$i = mt_rand(1, count($wall));
	$x = $wall[$i]->post_type;
	$z = $wall[$i]->is_pinned;
	if($x == 'post')
	{
		if($z !== 1)
		{
			$repost = file_get_contents("https://api.vk.com/method/wall.repost?v=5.4&object=wall-".$row['id']."_".$wall[$i]->id."&group_id=".$gid."&access_token=".$token);
			$repost = json_decode($repost);
		}
	}
	sleep(mt_rand(25, 45));
}
  • Вопрос задан
  • 349 просмотров
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
while($row = $qwe->fetch()) {
    $wall = file_get_contents("https://api.vk.com/method/wall.get?v=5.4&filter=owner&count=1000&owner_id=-".$row['id']);
    $wall = json_decode($wall);
    $wall = $wall->response->items;



    // Удаление элементов, которые не подходят под условие
    $wall = array_filter($wall, function($entry) {
        return ($entry->post_type == 'post' && $entry->is_pinned !== -1);
    });

    // Переиндексация массива, чтобы ключи шли по порядку
    $wall = array_values($wall);



    $i = mt_rand(1, count($wall));
    $repost = file_get_contents("https://api.vk.com/method/wall.repost?v=5.4&object=wall-".$row['id']."_".$wall[$i]->id."&group_id=".$gid."&access_token=".$token);
    $repost = json_decode($repost);

    sleep(mt_rand(25, 45));
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы