2016-07-24 62 views
1

所以我看到了这个解决方案,但是我的问题稍有不同。随机从PHP目录中选择一个文件

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

因此,举例来说,有一个目录中称为IMGS:

IMGS 内容:div.png,div2.png,divb.png,divab.png

我需要随机选择来自这个文件夹的文件,但我需要它在最后有ab。所以我只能得到divb.png或divab.png。

如果我得到一个不以b结尾的数据,我需要重新选择。 我目前有一些代码,给我一个超时,不重新选择。

 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; 
    } 
} 

编辑-----------------

  <?php 
function random_pic() { 
    $files = glob('imgs/*.png'); 
    do { 
    if (isset($file)) { 
     unset($files[$file]); 
    } 
    $file = array_rand($files); 
    } while ((substr($files[ $file ], -5 != ($shortparam . ".png"))) AND (count($files) > 0)); 
    if (count($files) > 0) { 
    return $files[ $file ]; 
    } else { 
    echo $file; 
    return false; 
    } 
} 
for ($i = 0 ; $i < 20; $k++){ 
     $image = random_pic(); 
     if($image == false){ 

     } else { 
    // display image 

此超时出于某种原因。 (致命错误:在84行的file.php中超过10秒的最大执行时间)

感谢您的帮助!

+0

您是否已经尝试过以下由Poiz&BenShoval提供的解决方案?如果你打算从包含一堆图像(包括PNG)的目录中选择一个随机PNG图像,Poiz的解决方案可能会被证明使用,尽管... – Poiz

+0

他们都让我超时@Poiz –

回答

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,因为它在父代端更通用。

+0

由于某种原因仍然超时。 –

+0

@OlyScargill我修复了可能导致它挂起的错误。 –

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);