2016-07-24 63 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);