2016-07-24 16 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; 
    } 
} 

EDIT -----------------

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

    } 

} 

親エンドでより汎用性があるため、何も見つからない場合は、NULLではなくFALSEを返すことを検討してください。

+0

何らかの理由でタイムアウトしました。 –

+0

@OllyScargillハングする可能性が高いエラーを修正しました。 –

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); 
関連する問題