按PHP中的数字排序图像

时间:2016-03-02 13:28:57

标签: php sorting

我正在尝试按照以下数字按顺序显示我的图片幻灯片:

$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] => Slide1.png [1] => Slide10.png [2] => Slide11.png [3] => Slide12.png [4] => Slide13.png [5] => Slide14.png [6] => Slide15.png [7] => Slide16.png [8] => Slide17.png [9] => Slide18.png [10] => ; Slide19.png [11] => Slide2.png [12] => Slide20.png [13] => Slide21.png [14] => Slide22.png [15] => Slide23.png [ 16] => Slide24.png [17] => Slide25.png [18] => Slide26.png [19] => Slide27.png [20] => Slide28.png [21] => Slide29.png [22] => Slide3.png [23] => Slide30.png [24] => Slide31.png [25] => Slide4.png [26] => Slide5.png [27 ] => Slide6.png [28] => Slide7.png [29] => Slide8.png [30] => Slide9.png)

如果我在natsort($image); $image[] = "$file";之后订单正确,但数组已关闭:

数组([0] => Slide1.png [11] => Slide2.png [22] => Slide3.png [25] => Slide4.png [26] => Slide5.png [27] => Slide6.png [28] => Slide7.png [29] => Slide8.png [30] => Slide9.png [1] => Slide10.png [2] => ; Slide11.png [3] => Slide12.png [4] => Slide13.png [5] => Slide14.png [6] => Slide15.png [7] => Slide16.png [ 8] => Slide17.png [9] => Slide18.png [10] => Slide19.png [12] => Slide20.png [13] => Slide21.png [14] => Slide22.png [15] => Slide23.png [16] => Slide24.png [17] => Slide25.png [18] => Slide26.png [19] => Slide27.png [20 ] => Slide28.png [21] => Slide29.png [23] => Slide30.png [24] => Slide31.png) 我需要他们订购Slide1 - Slide30,不像上面列出的那样。我可以将名称从数字(Slide1)更改为字母(SlideA),但希望保留此命名约定。有没有办法在不更改图像名称的情况下执行此操作?

此图片幻灯片是一个“如何”幻灯片放映。

4 个答案:

答案 0 :(得分:3)

NatSort正是您的目标。

只需使用natsort($image);

您可以参考:

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

答案 1 :(得分:1)

您可以使用 natsort()功能

natsort

e.g。

$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)。它使用不区分大小写的“自然顺序”算法对数组进行排序。

答案 2 :(得分:1)

我不知道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);

答案 3 :(得分:1)

这就行了!

之后

$image[] = "$file";

我添加了

sort($image, SORT_NATURAL | SORT_FLAG_CASE);

这正确地对数组中的图像和顺序进行排序:

数组([0] => Slide1.png [1] => Slide2.png [2] => Slide3.png [3] => Slide4.png [4] => Slide5.png [5] => Slide6.png [6] => Slide7.png [7] => Slide8.png [8] => Slide9.png [9] => Slide10.png [10] => ; Slide11.png [11] => Slide12.png [12] => Slide13.png [13] => Slide14.png [14] => Slide15.png [15] => Slide16.png [ 16] => Slide17.png [17] => Slide18.png [18] => Slide19.png [19] => Slide20.png [20] => Slide21.png [21] => Slide22.png [22] => Slide23.png [23] => Slide24.png [24] => Slide25.png [25] => Slide26.png [26] => Slide27.png [27 ] => Slide28.png [28] => Slide29.png [29] => Slide30.png [30] => Slide31.png)