2016-03-02 72 views
2

我試圖讓我的圖像幻燈片的數量與以下,以顯示:圖像排序按編號在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] => 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";後的順序是正確的,但在陣列關閉時:

Array([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),但希望保留此命名約定。有沒有辦法做到這一點,而不更改圖像名稱?

此圖像幻燈片是「如何」幻燈片放映。

+0

'eregi'在php7中被刪除。 – Daan

+5

嘗試使用natsort() –

+0

我們現在使用的PHP版本5.4.14,因爲Joomla 3.4不支持PHP 7在這個版本的Joomla @ MuhammedM.-我試過了,它的工作,但它不工作 –

回答

1

可以使用natsort()函數

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)。它使用不區分大小寫的「自然順序」算法對數組進行排序。

+0

手動添加數組中的圖像名稱不是一個選項,因爲它會複製數組中的圖像。此外,這張幻燈片是Joomla的一個模塊,因此無法全面工作。 –

+0

你應該在返回之前使用你認爲合適的natsort或natcasesort。請嘗試一次。 – Deep

+0

使用以下代碼: '$ image = array(); \t \t \t $ img_folder = $ params-> get('path'); \t \t \t \t \t \t mt_srand((double)microtime()* 1000); \t \t \t如果(is_dir($ img_folder)){ \t \t \t \t krsort($文件); \t \t \t \t $ imgs = dir($ img_folder); \t \t \t \t而($文件= $ imgs->讀()){ \t \t \t \t如果((eregi( 「GIF」,$文件)|| eregi( 「JPG」,$文件)|| eregi (「png」,$ file))) \t \t \t \t \t $ image [] =「$ file」; \t \t \t \t \t natcasesort($ image); \t \t \t \t \t \t \t \t} closedir(imgs- $>手柄); \t \t \t \t print_r($ image); \t \t \t \t return $ image; \t \t \t \t \t \t}' –

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); 
1

這做的竅門!剛過

$image[] = "$file";

我加入

sort($image, SORT_NATURAL | SORT_FLAG_CASE);

這正確地定購陣列中的圖像和順序:

陣列([0] =>滑件.png [1] => Slide2.png [2] => Slide3.png [3] => Slide4.png [4] => Slide5.png [5] => Slide6.png [6] => Slide7.pn g [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)