программа случайного выбора файлов - PullRequest
1 голос
/ 12 апреля 2019

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

Мне нужно выбрать случайный файл, но при выборе случайного файла в выбранной директории не допускайте выбора «results.php», поскольку этот файл используется для захвата случайного файла.

<?php
$files = glob(realpath('./') . '/*.*');
$file = array_rand($files);
echo basename($files[$file]);
?>

Ответы [ 4 ]

0 голосов
/ 12 апреля 2019

Вы можете использовать basename(__FILE__), чтобы найти имя исполняемого в данный момент скрипта и удалить его из массива файлов.

<?php
$files = glob(realpath('./') . '/*.*');

// Ensure the current script is not chosen.
$currentFile = basename(__FILE__);
if (array_key_exists($currentFile, $files)) {
    unset($files[$currentFile]);
}

$file = array_rand($files);

echo basename($files[$file]);

Обновление

Приведенный выше код не будет работать, поскольку $key в $files является числовым. Нам нужно перебрать файлы и проверить basename каждого из них. Если он найден, сбросьте его. Есть более эффективные способы справиться с этим, но это должно быть хорошо для небольшого (ish) каталога.

<?php
$files = glob(realpath('./') . '/*.*');

// Ensure the current script is not chosen.
$currentFile = basename(__FILE__);
foreach ($files as $key => $file) {
    if (basename($file) === $currentFile) {
        unset($files[$key]);
    }
}

$randomFile = array_rand($files);

echo basename($files[$randomFile]);
0 голосов
/ 12 апреля 2019

Если вам не нужны файлы фильтров, вы можете использовать scandir вместо glob для получения имен файлов в каталоге.вот решение

// current directory
$dir = getcwd();
// get all files in directory
$files = scandir($dir);

//filter only files and remove 'results.php' file
$file_arr = array_filter($files, function($file){
     return is_file($file) && $file != "results.php";
});

$file_name = array_rand($file_arr);
echo $file_arr[$file_name];
0 голосов
/ 12 апреля 2019

Вы можете сделать это так:

<?php

$files = glob(realpath('./') . '/*.*');

// Search the array for the file results.php and return its key
$unwanted_file = array_search(realpath('./results.php'),$files);

//Then remove it from the array
unset($files[$unwanted_file]);

$file = array_rand($files);

echo basename($files[$file]);

?>
0 голосов
/ 12 апреля 2019

для случайного выбора файла

function random_files($array_files_list, $no_of_select ){
    if( count($array_files_list) <= $no_of_select ){
        return array_rand($array_files_list, $no_of_select);
    }else{
        return array_rand($array_files_list, count($array_files_list)-1 );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...