Групповой массив приводит к алфавитному порядку PHP

Я использую приведенный ниже код для отображения базы данных изображений и имени базы данных webisites.

<fieldset> <h1>A</h1> <ul> <?php foreach ($records as $key) { ?> <li class="siteli"> <a href="#" class="add"> <div id="site-icon"><img src="<?php echo $key->site_img; ?>" width="16" height=""></div> <p id="text-site"> <?php echo $key->site_name; ?></p> </li> <?php } ?> </ul> </fieldset> 

Теперь я пытаюсь сгруппировать эти результаты в алфавитном порядке, добавив A, B, C и т. Д. В качестве названия.

Пример,

 A Amazon Aol Aol Mail B Bing Bogger 

Related of "Групповой массив приводит к алфавитному порядку PHP"

Вы можете использовать сортировку массивов для сортировки массива. В вашем случае я бы выбрал sort ()

Теперь, чтобы показать ссылки с предшествующим письмом, я бы использовал:

 <?php $records = ['Aaaaa', 'Aaaa2', 'bbb', 'bbb2', 'Dddd']; $lastChar = ''; sort($records, SORT_STRING | SORT_FLAG_CASE); //the flags are needed. Without the `Ddd` will come before `bbb`. //Available from version 5.4. If you have an earlier version (4+) you can try natcasesort() foreach($records as $val) { $char = $val[0]; //first char if ($char !== $lastChar) { if ($lastChar !== '') echo '<br>'; echo strtoupper($char).'<br>'; //print A / B / C etc $lastChar = $char; } echo $val.'<br>'; } ?> 

Это даст что-то вроде

 A Aaaa2 Aaaaa B bbb bbb2 D Dddd 

Обратите внимание, что C отсутствует, потому что нет слов, начинающихся с C.

Это модификация ответа @Hugo Delsing.

Мне нужно было сгруппировать мои бренды вместе, как это, но одна ошибка в коде заключалась в том, что если бы я сказал, что iForce Nutrition и Inner Armor, это сгруппировало бы их в две отдельные группы из-за буквы.

Изменения, которые я сделал
Поскольку он был полностью алфавитным, он шел только по первой букве I, менял SORT_STRING на SORT_NATURAL

Изменено: if ($ char! == $ lastChar) для if (strtolower ($ char)! == strtolower ($ lastChar))

 <?php $records = ['FinaFlex', 'iForce Nutrition', 'Inner Armour', 'Dymatize', 'Ultimate Nutrition']; $lastChar = ''; sort($records, SORT_NATURAL | SORT_FLAG_CASE); //Allows for a full comparison and will alphabetize correctly. foreach($records as $val) { $char = $val[0]; //first char if (strtolower($char) !== strtolower($lastChar)) { if ($lastChar !== '') echo '<br>'; echo strtoupper($char).'<br>'; //print A / B / C etc $lastChar = $char; } echo $val.'<br>'; } ?> 

Конечный результат будет таким:

 D Dymatize F FinaFlex I iForce Nutrition Inner Armour U Ultimate Nutrition 

Я надеюсь, что это поможет всем, и большое спасибо Хьюго за предоставление кода, который дал мне именно то, где я должен был быть.

Вы можете увидеть мой пример здесь https://hyperionsupps.com/brand-index

 $records = ['FinaFlex', 'iForce Nutrition', 'Inner Armour', 'Dymatize', 'Ultimate Nutrition']; $temp=array(); $first_char=""; for($i=0;$i<count($records);$i++) { $first_char= strtoupper ($records[$i][0]); if(!in_array($first_char, $temp)) { echo strtoupper($first_char).'<br>'; //print A / B / C etc } $temp[]= $first_char; echo $records[$i]."<br>"; }