презентация — сгенерированный PHP список файлов: есть ли способ сделать разрывы строк между разными буквами?

Я использую этот код для создания легко кликабельного списка файлов, присутствующих в каталоге, для которого apache не разрешил бы иметь прямой индекс:

<?php
foreach (glob("*.*") as $filename) {
echo "<a href='".$filename."'>".$filename."</a>&nbsp; &#8212;&#8212; &nbsp; ".intval(filesize($filename) / (1024 * 1024))."MB<br />";
}
?>

Дело в том, что это папка с более чем 1000 файлами, и это очень легко не чтобы быстро найти то, что мы ищем, ха-ха.

Я спрашиваю на всякий случай, пожалуйста, не могли бы вы найти способ вставить пропущенные строки, когда у нас будет новая первая буква?
После всех As, давайте пропустим строку, прежде чем перечислять Bs, а новую строку пропустим между C …

Большое спасибо, если вы можете помочь!

2

Решение

Нечто подобное должно работать (при условии, что ваши имена файлов уже упорядочены по алфавиту):

// create array of letters of the aplhabet
$letters = array("a","b","c","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");

foreach (glob("*.*") as $filename) {
if (in_array($filename[0],$letters)){ // check if first character of filename is in the array
echo "<br />";

if(($key = array_search($filename[0], $letters)) !== false) {
unset($letters[$key]);  //remove letter from array
}
}

echo "<a href='".$filename."'>".$filename."</a>&nbsp; &#8212;&#8212; &nbsp; ".intval(filesize($filename) / (1024 * 1024))."MB<br />";
}

Итак, мы создаем массив со всеми буквами алфавита. Затем мы проверяем, находится ли первая буква текущей строки в нашем цикле в массиве. Если это так, мы выводим еще один разрыв, а затем удаляем эту букву из массива, а затем выводим нашу строку как обычно.

Это создаст дополнительный разрыв строки каждый раз, когда появляется новое письмо

Если ваши имена файлов не все в нижнем регистре, вы можете убедиться, что вы сравниваете правильный регистр, используя strtolower() для ссылки на строку имени файла

1

Другие решения

Это может помочь вам.

            <?php
$prev_file_f_char = '';
foreach (glob("*.*") as $index => $filename) {
$base_name = strtolower(basename($filename));
if($base_name !== $prev_file_f_char && $index >0){
echo '<br/>';
}

echo "<a href='".$filename."'>".$filename."</a>&nbsp; &#8212;&#8212; &nbsp; ".intval(filesize($filename) / (1024 * 1024))."MB<br />";
$prev_file_f_char = $base_name[0];
}
?>

Или, если вы хотите группу на персонажа, то вы можете использовать это.

            <?php
$all_files = array();
foreach (glob("*.*") as $index => $filename) {
$base_name = strtolower(basename($filename));
$all_files[$base_name[0]][] = $filename;
}
ksort($all_files);
foreach($all_files as $char=>$file_per_char){
echo '<h3>'.strtolower($char).'</h3>';
foreach($file_per_char as $index => $filename){
echo "<a href='".$filename."'>".$filename."</a>&nbsp; &#8212;&#8212; &nbsp; ".intval(filesize($filename) / (1024 * 1024))."MB<br />";
}
}
?>
1

По вопросам рекламы [email protected]