PHP

Как сделать алфавитный указатель на сайте

Алфавитный указатель

Представленные способы помогут сделать алфавитный список (указатель) разбитый на колонки, для вывода например станций метро, производителей, категорий и т.д.

Данные берутся из БД. Важно чтобы при выборке сортировка была по имени: ORDER BY `name`.

У обоих способов есть один недостаток - колонки будут разной длины в зависимости от количества строк в каждой букве.

Способ 1: на основе php

$cols_number = 4; // Количество колонок
$rows = DB::getAll("SELECT * FROM `metro` ORDER BY `name`");

$res = $capital = '';
$cutter = $cut = ceil(count($rows) / $cols_number);
foreach ($items as $i => $row) {
    $firstletter = mb_substr($row['name'], 0, 1);
    if ($firstletter != $capital) {
        if ($i > $cutter) {
            $res .= '</td><td>';
            $cutter = $cutter + $cut;
        }
        $capital = $firstletter;
        $res .= '<div class="liter">' . $capital . '</div>';
    }
    $res .= '<div class="link"><a href="#.html">' . $row['name'] . '</a></div>';
}
<table class="lettr_list">
    <tr>
        <td>
            <?php echo $res; ?>
        </td>
    </tr>
</table>

Способ 2: на основе БД

$rows = DB::getAll("SELECT *, UPPER(LEFT(`name`, 1)) AS `letter` FROM `metro` ORDER BY `name`");
$rows = array_chunk($rows, ceil(count($rows) / 4));
$letter = '';
<table class="lettr_list">
    <tr>
        <?php foreach ($rows as $item): ?>
        <td>
            <?php foreach ($item as $row): ?>
            <?php if ($letter != $row['letter']): ?>
            <div class="liter"><?php echo $letter = $row['letter']; ?></div>
            <?php endif; ?>
            <div class="link">
                <a href="#"><?php echo $row['name']; ?></a>
            </div>
            <?php endforeach; ?>
        </td>
        <?php endforeach; ?>
    </tr>
</table>
30 октября 2016
В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают или совсем не...
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
Библиотека GD дает возможность работать с изображениями в PHP. Далее представлены примеры как изменить размер, вырезать...