Почему я получаю сообщение «Не могу найти терминатор строки» »« где-нибудь до EOF в строке -e 1 », когда пытаюсь запустить однострочную версию Perl в Windows?

Старый вопрос, но это то, с чем я столкнулся сегодня, желая выбрать случайную страницу. Я решил не использовать ни одного из ответов здесь из-за проблем с производительностью и того факта, что многие из них имеют сильные предубеждения в «случайном». Вот мое решение (используя PHP):

Pages model:

public static function getIDs() {
    $sql  = "SELECT `id` FROM `pages`;";
    $db   = static::getDB();
    $stmt = $db->query($sql);

    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

Pages controller:

public function randomAction() {
    $pages  = Pages::getIDs();
    $random = $pages[rand(0, count($pages))];

    $this->redirect('/' . $random['id'], 307);
}

В принципе, все, что он делает, это получить массив пулов страниц из БД и использование PHP для выбора случайного из возвращаемого массива.

Если вы хотите 10 записей, просто перебирайте массив и удалите выбранные, чтобы избежать дублирования, а затем добавьте их к отдельному массиву результатов. Что-то вроде этого:

public static function randomAction() {
    $pages   = Pages::getIDs();
    $count   = count($pages);
    $results = [];

    for($i = 0; $i < 10; $i++) {
        $random = rand(0, $count);
        $count -= 1;

        $results[] = $pages[$random];
        unset($pages[$random]);
    }

    return $results;
}
13
задан Sinan Ünür 13 October 2011 в 22:20
поделиться