Задать вопрос
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));
}
  • Вопрос задан
  • 355 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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));
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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