在 PHP 中按数字对图像进行排序


Sort Images by Number in PHP

我正在尝试让我的图像幻灯片按编号顺序显示,如下所示:

$image=array();
        $img_folder = $params->get('path');
        mt_srand((double)microtime()*1000);
        if(is_dir($img_folder)){
            krsort($file);
            $imgs = dir($img_folder);
            while ($file = $imgs->read()) {
               if ((eregi("gif", $file) || eregi("jpg", $file) || eregi("png", $file)))
                 $image[] = "$file";
            } closedir($imgs->handle);
            print_r($image);
            return $image;          
        }

但是,数组有效,但顺序已关闭:

数组 ( [0] => 幻灯片1.png [1] => 幻灯片10.png [2] => 幻灯片11.png [3] => 幻灯片12.png [4] => 幻灯片13.png [5] => 幻灯片14.png [6] => 幻灯片15.png [7] => 幻灯片16.png [8] => 幻灯片17.png [9] => 幻灯片18.png [10] => 幻灯片19.png [11] => 幻灯片2.png [12] => 幻灯片20 .png [13] => 幻灯片21.png [14] => 幻灯片22.png [15] => 幻灯片23.png [16] => 幻灯片24.png [17] => 幻灯片25.png [18] => 幻灯片26.png [19] => 幻灯片27.png [20] => 幻灯片28.png [21] => 幻灯片29.png [22] => 幻灯片3.png [23] => 幻灯片

30.png [24] => 幻灯片31.png[25

] => 幻灯片4.png [26] => 幻灯片5.png [27] => 幻灯片6.png [28] => 幻灯片7.png [29] => 幻灯片8.png [30] => 幻灯片9.png )

如果我在$image[] = "$file";之后放natsort($image);,顺序是正确的,但数组是关闭的:

数组 ( [0] => 幻灯片 1.png [11] => 幻灯片 2.png [22] => 幻灯片3.png [25] => 幻灯片4.png [26] => 幻灯片5.png [27] => 幻灯片6.png [28] => 幻灯片7.png [29] => 幻灯片8.png [30] => 幻灯片9.png [1] => 幻灯片10.png [2] => 幻灯片11.png [3] => 幻灯片12.png [4] => 幻灯片13.png [5] => 幻灯片14.png [6] => 幻灯片15.png [7] => 幻灯片16.png [8] => 幻灯片17.png [9] => 幻灯片18.png [10] => 幻灯片19.png [12] => 幻灯片20.png [13] => 幻灯片21.png [14] => 幻灯片22.png [15] => 幻灯片23.png [16] => 幻灯片24.png [17] =>

幻灯片25.png [18] =>幻灯片26.png [19] => 幻灯片27.png [20] => 幻灯片28.png [21] => 幻灯片29.png [23] => 幻灯片30.png [24] => 幻灯片31.png )我需要他们订购幻灯片 1 - 幻灯片 30,不像上面列出的那样。 我可以将名称从数字(幻灯片 1)更改为字母 (幻灯片A),但希望保留此命名约定。 有没有办法在不更改图像名称的情况下执行此操作?

此图像幻灯片是"操作方法"幻灯片放映。

NatSort就是你要找的。

只需使用natsort($image);

您可以在以下位置参考它:

http://php.net/manual/es/function.natsort.php

我不知道

natsort(),这也应该这样做。

$imgs = scandir(dir($img_folder));
$sorted = array();
foreach($imgs as $img){
    $index = intval(trim($img, "Slide.png"));
    $sorted[$index] = $img;
}
ksort($sorted);
$sorted = array_values($sorted);

你可以使用 natsort() 函数

纳特排序

例如

$array1 = array("img12.png", "img10.png", "img2.png", "img1.png");
 natsort($array);
 print_r($array);

这样你就会得到输出是:

Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )

您也可以使用 natcasesort($image)。它使用不区分大小写的"自然顺序"算法对数组进行排序。

这起到了作用!!

刚过之后

$image[] = "$file";

我添加了

sort($image, SORT_NATURAL | SORT_FLAG_CASE);

这将正确排序数组中的图像和顺序:

数组 ( [0] => 幻灯片1.png [1] => 幻灯片2.png [2] => 幻灯片3.png [3] => 幻灯片4.png [4] => 幻灯片5.png [5] => 幻灯片6.png [6] => 幻灯片7.png [7] => 幻灯片8.png [8] => 幻灯片9.png [9] => 幻灯片10.png [10] => 幻灯片11.png [11] => 幻灯片12.png [12] => 幻灯片13.png [13] => 幻灯片14.png [14] => 幻灯片15.png [15] => 幻灯片16.png [16] => 幻灯片17.png [17] => 幻灯片18.png [18] => 幻灯片19.png [19] => 幻灯片20.png [20] => 幻灯片21.png [21] => 幻灯片22.png [22] => 幻灯片23.png [23] => 幻灯片24.png [24] => 幻灯片25

.png [25] =>幻灯片26.png [26

] => 幻灯片27.png [27] => 幻灯片28.png [28] => 幻灯片29.png [29] => 幻灯片30.png [30] => 幻灯片31.png )