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));
}
  • Вопрос задан
  • 346 просмотров
Решения вопроса 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));
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
от 300 000 до 500 000 ₽
06 мая 2024, в 14:54
1000 руб./за проект
06 мая 2024, в 14:53
45000 руб./за проект
06 мая 2024, в 14:31
200000 руб./за проект