Случайный файл из массива в php

Я успешно создал php-скрипт, который создает массив файлов из папки.

Проблема в том, что я хочу, чтобы он случайным образом взял один из файлов из массива. Он отлично работает, когда я вручную устанавливаю количество файлов в каталоге, а не когда я пытаюсь подсчитать размер массива. Вот что я придумал

$dir = 'MemeDatabase';
$fileNames = array();
if (is_dir($dir)){
    $handle = opendir($dir);
    while(false !== ($file = readdir($handle))){
        if (is_file($dir.'/'.$file) && is_readable($dir.'/'.$file)){
            $fileNames[] = $file;
        }
    }
closedir($handle);
int count($fileNames);
$fileNames = array_reverse($fileNames);
$rand_keys = array_rand($fileNames, $count);
echo $fileNames[$rand_keys[0]] . "\n";
print_r($fileNames);

} else {
    echo "<p>There is an directory read issue</p>";
}

Как насчет shuffle() сначала массив, а затем выберите нужные данные

B001ᛦ 18.10.2018 12:47

Просто используйте $fileName = array_rand($fileNames), линия int count($fileNames); или array_reverse() не нужна.

Nigel Ren 18.10.2018 12:48

И $rand_keys = array_rand($fileNames, $count); неверен, если вы хотите вернуть только один ключ, используйте $rand_keys = array_rand($fileNames, 1);

RiggsFolly 18.10.2018 12:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
143
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете удалить часть кода и просто использовать array_rand(), который по умолчанию будет выбирать только 1 элемент из массива ...

    closedir($handle);
//     int count($fileNames);    // This is an error anyway
//     $fileNames = array_reverse($fileNames);    // Not needed
//     $rand_keys = array_rand($fileNames, $count);
    $fileName = $fileNames[array_rand($fileNames)];
    echo $fileName;

Это работает, спасибо! Я приму ответ после окончания перезарядки :)

VB_Dojnaz 18.10.2018 12:56

Другие вопросы по теме