我有以下代码:
$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)。
答案 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>';