所以我已经看到了这方面的解决方案,但我的问题略有不同。
我希望文件最后有一个字符。
因此,例如,有一个名为imgs:
的目录IMGS contents:div.png,div2.png,divb.png,divab.png
我需要从这个文件夹中随机选择一个文件,但我需要它在最后有一个b。所以我只能使用divb.png或divab.png。
如果我得到一个没有以b结尾的话,我需要重新选择。 我目前有一些代码可以让我暂停并且不会重新选择。
/storage/emulated/0/Documents/
编辑-----------------
function random_pic($dir = 'imgs'){
$files = glob($dir . '/*.png');
$file = array_rand($files);
if(substr($files[$file], -5)==$shortparam.".png"){
return $files[$file];
} else {
return null;
}
}
由于某种原因,这次超时了。 (致命错误:第84行的file.php中超过了10秒的最大执行时间)
感谢您提供任何帮助!
答案 0 :(得分:0)
我显然没有你的文件和你的目录结构来试试这个代码,但我非常有信心它会解决你的问题。
function random_pic( $dir = 'imgs' ) {
if ( $files = glob( $dir . '/*.png' ) ) {
do {
if ( isset( $file ) ) {
unset( $files[$file] );
}
if ( count( $files ) > 0 ) {
$file = array_rand( $files );
}
} while ( ( substr( $files[ $file ], -5 != ( $shortparam . ".png" ) ) ) AND ( count( $files ) > 0 ) );
if ( count( $files ) > 0 ) {
return $files[ $file ];
} else {
return NULL;
}
} else {
return NULL;
}
}
如果找不到任何内容,您可能需要考虑返回FALSE而不是NULL,因为它在父端更通用。
答案 1 :(得分:0)
您可以通过glob
,array_walk()
,array_rand()
和preg_match()
的混合来实现这一目标。
<?php
function random_pic($dir='imgs', $extension=".png", $endChar="b"){
$files = glob($dir . "/*{$extension}");
$matches = array();
array_walk($files, function($imgFile, $index) use ($extension, $endChar, &$matches) {
$pixName = preg_replace("#" . preg_quote($extension) . "#", "", basename($imgFile));
if( preg_match("#" . preg_quote($endChar) . "$#", $pixName)){
$matches[] = $imgFile;
}
});
return (count($matches))? $matches[array_rand($matches)] : null;
}
$randomPic = random_pic(__DIR__. "/imgs", ".png", "b");
// OR JUST USE THE DEFAULTS SINCE THEY ARE JUST THE SAME IN YOUR CASE:
// $randomPic = random_pic();
var_dump($randomPic);