2016-03-02 5 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 ((двойной) микропоры() * 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} ' –

3

NatSort - это то, что вы ищете.

просто использовать natsort($image);

Вы можете ссылаться на него по адресу:

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

+0

Выполнено, спасибо за то, что выбрали это. –

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

Это правильно упорядочивает изображения в массиве и порядок:

Array ([0] => Slide1 .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)

Смежные вопросы