Я использую этот код для создания легко кликабельного списка файлов, присутствующих в каталоге, для которого apache не разрешил бы иметь прямой индекс:
<?php
foreach (glob("*.*") as $filename) {
echo "<a href='".$filename."'>".$filename."</a> —— ".intval(filesize($filename) / (1024 * 1024))."MB<br />";
}
?>
Дело в том, что это папка с более чем 1000 файлами, и это очень легко не чтобы быстро найти то, что мы ищем, ха-ха.
Я спрашиваю на всякий случай, пожалуйста, не могли бы вы найти способ вставить пропущенные строки, когда у нас будет новая первая буква?
После всех As, давайте пропустим строку, прежде чем перечислять Bs, а новую строку пропустим между C …
Большое спасибо, если вы можете помочь!
Нечто подобное должно работать (при условии, что ваши имена файлов уже упорядочены по алфавиту):
// 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> —— ".intval(filesize($filename) / (1024 * 1024))."MB<br />";
}
Итак, мы создаем массив со всеми буквами алфавита. Затем мы проверяем, находится ли первая буква текущей строки в нашем цикле в массиве. Если это так, мы выводим еще один разрыв, а затем удаляем эту букву из массива, а затем выводим нашу строку как обычно.
Это создаст дополнительный разрыв строки каждый раз, когда появляется новое письмо
Если ваши имена файлов не все в нижнем регистре, вы можете убедиться, что вы сравниваете правильный регистр, используя strtolower()
для ссылки на строку имени файла
Это может помочь вам.
<?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> —— ".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> —— ".intval(filesize($filename) / (1024 * 1024))."MB<br />";
}
}
?>