PHP (папка) файл, перечисляющий в алфавитном порядке?

Насколько я могу сказать работы msysgit отлично под Windows Vista.

Это после целого 2-месячного опыта, проверяющего плагины и приложения для Ruby on Rails:-)

Так или иначе, это был бриз для установки, без проблем.

5
задан SoulieBaby 8 July 2009 в 01:07
поделиться

5 ответов

Вместо использования readdir вы можете просто использовать scandir ( документация ), которая по умолчанию сортирует в алфавитном порядке.

Возвращаемое значение scandir - это массив вместо строки, поэтому ваш код придется немного скорректировать, для перебора массива вместо проверки конечного возвращаемого значения null . Кроме того, scandir принимает в качестве входных данных строку с путем к каталогу вместо дескриптора файла, новая версия будет выглядеть примерно так:

foreach(scandir($mainframe->getCfg( 'absolute_path' ) ."/images/store/") as $file) {
  // rest of the loop could remain unchanged
}
14
ответ дан 18 December 2019 в 07:31
поделиться

Этот код выглядит довольно запутанным. Вы можете отделить логику обхода каталога от презентации. Гораздо более краткая версия (на мой взгляд):

<?php

// Head of page
$it = new DirectoryIterator($mainframe->getCfg('absolute_path') . '/images/store/'));

foreach ($it as $file) {
    if (preg_match('#\.jpe?g$#', $file->getFilename()))
        $files[] = $file->getFilename();
}
sort($files);

// Further down
foreach ($files as $file)
    // display links to delete file.
?>

Вам даже не нужно беспокоиться об открытии или закрытии дескриптора, а поскольку вы проверяете имя файла с помощью регулярного выражения, вам не нужны никакие разнесенные или условные проверки.

3
ответ дан 18 December 2019 в 07:31
поделиться

Мне нравится Glob Это делает чтение каталога мгновенным, поскольку он возвращает массив, который легко сортировать:

<?php
$files = glob("*.txt");
sort($files);
foreach ($files as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>
2
ответ дан 18 December 2019 в 07:31
поделиться

Если вы используете Joomla1.5, вам следует использовать определенную константу JPATH_BASE вместо

$mainframe->getCfg( 'absolute_path' )

. Если это расширение Joomla, которое вы будете распространять, не t используйте scandir () , так как это только PHP5.

Лучше всего использовать Joomla API. В нем есть классы для доступа к каталогам и файлам, которые разложены на уровни, чтобы делать это по разным сетям и протоколам. Таким образом, файловая система может быть, например, через FTP, а классы могут быть расширены для любой сети / протокола.

jimport( 'joomla.filesystem.folder' );
$files = JFolder::files(JPATH_BASE."/images/store/");
sort($files); 
foreach($files as $file) { 
   // do your filtering and other task
}

Вы также можете передать регулярное выражение в качестве второго параметра в JFolder :: files (), который фильтрует файлы, которые вы получаете .

Вы также не хотите использовать литералы URL, такие как / administrator /, поскольку их можно изменить. используйте методы JURI, например:

JURI :: base ();

Если вы хотите убедиться в наличии классов CSS Joomla в таблицах, для:

'<tr class="row0">'

используйте:

'<tr class="row'.($i&1).'">'

где $ i - количество итераций. Это дает вам последовательность чередующихся нулей и единиц.

1
ответ дан 18 December 2019 в 07:31
поделиться

Если у нас есть встроенные функции PHP, всегда используйте их, они быстрее. используйте glob вместо обхода папок, если он вам подходит.

$ folder_names = array (); $ folder_names = glob ('*', GLOB_ONLYDIR + GLOB_MARK + GLOB_NOSORT);

  • возвращает все в текущем каталоге, используйте chdir () перед его вызовом удалите GLOB_ONLYDIR, чтобы включить файлы (. будут только файлы) GLOB_MARK предназначен для добавления косой черты к именам папок Удалить GLOB_NOSORT не для сортировки массива
1
ответ дан 18 December 2019 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: