Вывод списка по алфавиту

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

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

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

1
$cols_number = 4; // Количество колонок

$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare("SELECT * FROM `metro` ORDER BY `name`");
$sth->execute();
$rows = $sth->fetchAll(PDO::FETCH_ASSOC);

$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>';
}
PHP
<table class="lettr_list">
	<tr>
		<td>
			<?php echo $res; ?>
		</td>
	</tr>
</table>
HTML
2
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare();
$sth->execute("SELECT *, UPPER(LEFT(`name`, 1)) AS `letter` FROM `metro` ORDER BY `name`");
$rows = $sth->fetchAll(PDO::FETCH_ASSOC);

$rows = array_chunk($rows, ceil(count($rows) / 4));
$letter = '';
PHP
<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>
HTML
30.10.2016, обновлено 09.10.2020
9525
Предыдущая запись Работа с директориями в PHP

Комментарии

, чтобы добавить комментарий.

Другие публикации

Поиск похожих текстов в базе данных MySQL + PHP
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
7230
+6
Генерация случайных буквенно-цифровых кодов в PHP
Несколько примеров, как сгенерировать случайные последовательности численных и буквенных строк заданной длины и...
11533
+4
Обработка и вывод рейтинга в PHP
В продолжении статьи о верстки рейтинга, рассмотрим PHP-скрипты системы отзывов и рейтинга в интернет-магазине.
20096
+9
Раскрывающийся многоуровневый список
В данном примере описано как вывести многоуровневый список checkbox и radio button из БД с помощью PHP функций...
16732
+8
Получить фото из Instagram без API
Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и...
24688
+7
Примеры использования PDO MySQL
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
103990
+8