从PHP目录中随机选择一个文件

时间:2016-07-24 22:56:52

标签: php

所以我已经看到了这方面的解决方案,但我的问题略有不同。

我希望文件最后有一个字符。

因此,例如,有一个名为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秒的最大执行时间)

感谢您提供任何帮助!

2 个答案:

答案 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)

您可以通过globarray_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);