如何从php中的数组目录中排序文件

时间:2013-02-26 19:18:22

标签: php file

我有以下代码:

$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)。

3 个答案:

答案 0 :(得分:1)

您可以使用PHP内置的natsort函数。这将从最小到最大(按数字),字母前面的数字等排序。如果您需要以相反的顺序对它们进行排序,则可以在排序后使用array_reverse

以下是一个例子:

natsort($dirs); // Naturally sort the directories
$dirs = array_reverse($dirs); // Reverse the sorting

答案 1 :(得分: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

答案 2 :(得分: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>';