<?php

$total = 7;
$skip = 4;

//создаем массив для хранения участников
$humans = array();

//заполняем массив участниками жеребьевки
for ($i = 0; $i < $total; $i++) {
    $humans[$i] = $i + 1;
}

//узнаем количество участников;
$length = count($humans);

//узнаем сколько участников не участвует в текущем круге
$humansEnd = count($humans) % $skip;

//узнаем с какой позиции нужно начать следующий круг
$newStart = count($humans) - $humansEnd - 1;

//на какой слог по счету выкидываем участника
$count = $skip - 1;

//пока количество участнико больше или равно количеству слогов
for ($i = $length; $i >= $skip; $i--) {
    unset($humans[$count]);

//    если позиция участника совпадает с позицией для нового круга
    if ($count == $newStart) {
//        переносим всех оставшихся участник в начало массива
        while ($humansEnd > 0) {
            array_unshift($humans, array_pop($humans));
            $humansEnd--;
        }

//        обновляем количество количество не участвующих в текущем круге
        $humansEnd = count($humans) % $skip;

//        обновляем позицию для начала нового круга
        $newStart = count($humans) - $humansEnd - 1;

//        задаем значение по умолчанию для слога
        $count = -1;
    }
//    обновляем счетчик
    $count += $skip;
}

echo "Выигрышные места: ";

foreach ($humans as $value) {
    echo "{$value} ";
}