Отображение результатов opendir в списке выбора в алфавитном порядке

Я заполняю элемент select следующим образом:

<?php
      $files2 = opendir(WAVEFORM_RELATIVE_PATH);
      while (false!==($READ=readdir($files2))) {
        if (in_array(substr(strtolower($READ),-4),array('.png'))) {
            echo '<option'.($TRACKS->waveform==$READ ? ' selected="selected"' : '').'>'.$READ.'</option>'."\n";
        }
      }
      closedir($files2);
      ?>

На данный момент он возвращает результаты в совершенно случайном порядке. Как сделать так, чтобы список отображался в алфавитном порядке?


person Grant    schedule 04.06.2013    source источник


Ответы (3)


Самый простой способ — использовать scandir. Вы можете указать порядок сортировки, используя SCANDIR_SORT_ASCENDING (0) или SCANDIR_SORT_DESCENDING (1):

$files2 = scandir(WAVEFORM_RELATIVE_PATH, SCANDIR_SORT_ASCENDING);
foreach($files2 as $file) {
    if (in_array(substr(strtolower($file), -4), array('.png'))) {
        echo '<option'.($TRACKS->waveform==$file? ' selected="selected"' : '').'>'.$file.'</option>'."\n";
    }
}
person user428517    schedule 04.06.2013
comment
Спасибо за предложение, но это не возвращает никаких результатов в моем раскрывающемся списке. Пустой каталог? Это может быть из-за того, что исходная процедура считывает, какой параметр был ранее выбран и сохранен, а этот не выглядит так, как есть? А может я ошибаюсь? - person Grant; 04.06.2013
comment
это был просто пример, чтобы показать, как работает scandir. я не знаю цели вашего кода или как он должен работать. возможно, попробуйте повторить $file в цикле, чтобы убедиться, что файлы в каталоге действительно считываются в $file2. - person user428517; 04.06.2013
comment
Великолепно, это сделало работу. Спасибо большое ;) - person Grant; 04.06.2013

Возможно, вы можете сохранить имя файла в массиве, отсортировать массив, а затем использовать их в параметрах выбора.

person Lepanto    schedule 04.06.2013

Просто используйте glob.

$files = glob(WAVEFORM_RELATIVE_PATH.'/*.png');
sort($files);
foreach($files as $file)
    echo '<option....>'.$file.'</option>';
person sectus    schedule 04.06.2013