0

私は1000以上の画像と(codaddictによる)コードの一部を含むディレクトリを持っており、最初の10個だけを選択して表示します:

<?php
foreach (array_slice(glob("/directory/*.jpg"),0,10) as $path)
?>

これは機能しますが、最初の10個ではなく、10個のランダムな画像を選択する必要があります

はい、最初にシャッフルしてからスライスすることができますが、1000以上(または10k以上)の画像では、10枚の画像だけで長い配列をシャッフルするのは賢明ではありませんか?

また、2つ目の問題は、これは1000以上の画像を含む1つのフォルダだけではなく、他のフォルダでもこのスクリプトを使用する必要があることです。一部のフォルダには1つの画像しかないため、エラーが発生した場合は表示されません。フォルダ内の画像が10枚未満です

2つのランダムなアイテムのphpマニュアルコードで見ましたが、フォルダに含まれる画像の数がわかりません-1、10、10k...問題が発生します

<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>

ありがとう!

4

1 に答える 1

1
function imageGlobber($myDir, $imgCount) {
    $globVar = glob($myDir."/*.jpg");
    $imgCount = ($imgCount > count($globVar)) ? $imgCount : count($globVar);

    $randKeys = array_rand($globVar, $imgCount);

    $retArray = array();
    foreach($randKeys as $key)
        array_push($retArray, $globVar[$key]);

    return $retArray;
}

これがあなたが探しているものだと思います。

編集:重複処理も追加されました。

編集:パフォーマンスが向上しました。

于 2013-02-16T19:18:41.293 に答える