2

次のコードがあります。

$imageDir = "uploads/";
$allowedTypes = array('png', 'jpg', 'jpeg', 'gif');
$dimg = opendir($imageDir);
$images = array();

while ($imgfile = readdir($dimg)) {
    if (in_array(strtolower(substr($imgfile, -3)), $allowedTypes) || (in_array(strtolower(substr($imgfile, -4)), $allowedTypes))) {
        $images[] = $imgfile;

    }
}

基本的に必要なのは、$images 配列で画像を並べ替えることです。たとえば、 image-1.png 、 image-2.png 、 image-23.png 、 image-3.png があり、それらを $images 配列 (1, 2, 3, 23) に正しい順序で格納したい(1、2、23、3) ではありません。

4

3 に答える 3

1

natsortここでは、人間が行うように英数字文字列をソートする必要があります。

また、ファイル拡張子を信頼する場合は、最後に分割する必要があり.ます (ただし、それには触れません。実際には MIME タイプをチェックする必要がありますが、それは宿題としてできる追加の作業です)。

$image_dir = "uploads/";
$allowed_types = array('png', 'jpg', 'jpeg', 'gif');
$dimg = opendir($image_dir); // I vehemently follow my own style guide.
$images = array('png' => [], 'jpg' => [], 'jpeg' => [], 'gif' => []);
// all these people using pure array() when we've had the shorthand since php4...

while ($img_file = readdir($dimg)) {
    $ext = strtolower(end(explode(".", $img_file))); // end() is fun.
    if (in_array($ext, $allowed_types)) {
        $images[$ext][] = $img_file;
    }
}
foreach ($images as &$images_) { // pass-by-reference to change the array itself
    natsort($images_);
}

// $images is now sorted
于 2013-02-26T19:37:53.130 に答える
1

natsortPHPに組み込まれている関数を使用できます。これにより、(数字に関して) 小さいものから大きいもの、文字の前に数字、というように並べ替えられます。逆の順序で並べ替える必要がある場合はarray_reverse、並べ替えの後に を使用できます。

次に例を示します。

natsort($dirs); // Naturally sort the directories
$dirs = array_reverse($dirs); // Reverse the sorting
于 2013-02-26T19:29:35.263 に答える
0

このコードを試すことができます

$imageDir = "uploads/";
$allowedTypes = array('png', 'jpg', 'jpeg', 'gif');
$images = scandir($imageDir);

usort($images, function($file1, $file2){
    preg_match('/^image-(\d+)\./', $file1, $num1);
    preg_match('/^image-(\d+)\./', $file2, $num2);
    return $num1 < $num2 ? -1 : 1;
});

echo '<pre>' . print_r($images, 1) . '</pre>';
于 2013-02-26T19:32:13.707 に答える