// исходный массив
$artists = array('ffff', 'cccc', 'аaaa');
// сортируем и получаем: аaaa, cccc, ffff
asort($artists);
// цикл "для каждого артиста"
foreach($artists as $artist){
// отрезаем первую букву и делаем её заглавной
$first_letter = mb_strtoupper(substr($artist, 0, 1));
// добавляем в массив список артистов на букву $first_letter
$output[$first_letter][] = $artist;
}
<?php
$phrases = array("Aaa", "abb", "acc", "bbb", "bb2");
$groups = array();
foreach($phrases as $phrase) {
$firstLetter = mb_strtoupper($phrase{0});
$groups[$firstLetter][] = $phrase;
}
var_dump($groups);
$data = $db->query(SELECT * FROM .... ORDER BY `name` ASC)->fetchAll(PDO::FETCH_ASSOC)
$result = array();
foreach($data as $d)
{
$first = mb_strtoupper($d['name']{0});
if(isset($result[$first]))
array_push($result[$first], $d);
else
$result[$first] = array($d);
}
<?php foreach($result as $char=>$values): ?>
<tr>
<td class='большая буква'><?php echo $char ?></td>
.........а тут уже все названия будут в массиве $values, как это все выводить - дело верстки.........
</tr>
<?php endforeach;?>