@Ruslanpro Что-то типа такого: PHP: <?php $result = ['алмазная резка','автоматика','архитектура','барельеф','бетонные работы','бурение скважин','вентиляция','витражи','водопровод','гиодезия']; $letter_result = [["А"],["Б"],["В"],["Г"],["Д"],["Е"],["Ё"],["Ж"],["З"],["И"],["Й"],["К"],["Л"],["М"],["Н"],["О"],["П"],["Р"],["С"],["Т"],["У"],["Ф"],["Х"],["Ц"],["Ч"],["Ш"],["Щ"],["Ъ"],["Ы"],["Ь"],["Э"],["Ю"],["Я"]]; $count=0; while ($count<count($letter_result)) { foreach ($result as $r) { if (mb_stripos($r,$letter_result[$count][0])===0) {$letter_result[$count][]=$r;} else $count++; } } echo '<pre>'; print_r($letter_result); echo '</pre>'; ?> А дальше на печать $letter_result, где каждый 0 - это буква, каждый не 0 - категория, и если длина массива 1, то категорий на эту букву нет. П.С. Массив из базы должен быть отсортирован
PHP: <?php $result = [ 'алмазная резка', 'автоматика', 'архитектура', 'барельеф', 'бетонные работы', 'бурение скважин', 'вентиляция', 'витражи', 'водопровод', 'гиодезия' ]; $letter_result = [ ["А"],["Б"],["В"],["Г"],["Д"],["Е"], ["Ё"],["Ж"],["З"],["И"],["Й"],["К"], ["Л"],["М"],["Н"],["О"],["П"],["Р"], ["С"],["Т"],["У"],["Ф"],["Х"],["Ц"], ["Ч"],["Ш"],["Щ"],["Ъ"],["Ы"],["Ь"], ["Э"],["Ю"],["Я"]]; foreach($letter_result as $letter) { echo mb_strtolower($letter[0]) . '<br>'; foreach($result as $title) { if(mb_substr($title, 0, 1) == mb_strtolower($letter[0])) { echo $title . '<br>'; $key = array_search($title, $result); unset($result[$key]); } } echo '<br>'; } echo '<pre>'; print_r($result); echo '</pre>';
@Dimon2x 1) ты год поста посмотри 2) это не боевой запрос, а всего лишь подсказка, что MySQL умеет работать со строками ( функция LEFT() ) не хуже, а иногда и лучше РНР. а это даже желания нет комментировать...
PHP: SELECT UPPER(SUBSTRING(name, 1, 1)) AS `fl` FROM `table` Запрос который вернёт первую букву поля name и сделает её заглавной. А теперь вопрос на засыпку: "Зачем в MySQL есть UPPER(SUBSTRING(name, 1, 1)), когда то же самое можно сделать средствами РНР?"
@Dimon2x А чем if(mb_substr($title,0,1)==mb_strtolower($letter[0])) лучше if(mb_stripos($r,$letter_result[$count][0])===0) ??? Я думаю что названия категорий могут вбить и с большой буквы. Уж как сделать чтоб геодезия не потерялась он может сам сделать, тем более он ПРО.
Warning: mb_stripos(): Empty delimiter in D:\OSPanel\domains\localhost\menu_general\gallery_menu.php on line 65 Не могу понять в чем ошибка PHP: while ($count<count($letter_result)) { foreach ($result as $r) { if (mb_stripos($r,$letter_result[$count][0])===0){ $letter_result[$count][]=$r; } else $count++; } }
@Ruslanpro ошибка в том что в $letter_result[$count][0] приходит пустая строка, откуда она приходит я не знаю. Смотри через var_dump или print_r, и выясняй
Этот код на планшете --- Добавлено --- Когда добавил еще одну категорию «гипсокартон» в массив $result вышла ошибка --- Добавлено --- Почему первое название категории не выводит начиная с буквы Б В Г
Уважаемый Про, если я вам, как Про, задам вопросы, которые вызывают затыки у меня, вы, уважаемый Про, кодящий наугад, путающий сортировку, апперкейс, не умеющий внятно излагать мысли, и пищущий "bukva" и "yakor", ПРОсто охуeете. По этому, нехер огрызаться.
@Fell-x27 «умник» во впервых я не программист код пишу так как мне понятно. Во вторых твое какое дело что у меня там Pro или Profi. Я тебя не спрашивал про твое фото на аватар которое смахивает на твой характер. Спустись по ниже я не люблю высокомерных людей. --- Добавлено --- @Fell-x27 Посмотри как наш диалог начинался и кто там начал на личность переходить --- Добавлено --- Давайте каждую подпись через фильтр пропустим на соответствии его владельца --- Добавлено --- Если тебя зацепило подпись Про то я в своем деле Про а программирование я осваиваю для себя и своего проекта --- Добавлено --- @Fell-x27 и мне не указывай огрызаться или нет.
@Ruslanpro короче раз не програмист, то не запаривайся и не хами програмистам. Вот те код он рабочий, немного неправильный в плане того что ключи массива русские буквы, но работать будет: PHP: <?php $result = ['алмазная резка','автоматика','архитектура','барельеф','бетонные работы','бурение скважин','вентиляция','витражи','водопровод','гиодезия']; foreach ($result as $r) { $letter_result[mb_substr($r,0,1)][]=$r;//создание массива буква=>[категории буквы] } //вывод foreach ($letter_result as $key=>$value) //перебор всех массивов буква=>категории этой буквы { echo "<p>$key</p>";//буква foreach ($value as $v) { echo "<p>$v</p>";//каждая категория для этой буквы } } ?> Используй его и не парься, станешь програмистом придумаешь правильный и не хами и не цепляйся к людям, ты пришел за помощью тебе помогают, хамить не надо, даже если ты считаешь что ты прав
@MRSgiba я не люблю хамить до тех пор пока не начинают личность задевать. Неужели так сложно пройти мимо если не можешь поддержать советом и т.д. Спасибо за код --- Добавлено --- @MRSgiba почему тебе не нахомил или другим а именно ему. Я тут на форуме часто замечаю как программисты высокомерно отвечают тем у кого мало знания и не по теме . Тебе задают вопрос ответь конкретно по этому вопросу если не можешь оставь и дай ответить тем кто сможет
@Ruslanpro я тебе скажу так, чтобы ответить на даже самый простой вопрос в нем нужно разобраться, и иногда разбор в этом вопросе занимает уйму времени (учитывая неразборчивость исходных данных), у нормальных программистов оно дорогое, и они просят автора вопроса максимально комфортно преподнести исходные данные, чтобы им было максимально комфортно, за минимальный временной отрезок дать максимально полный ответ.
Решил задачу на странице. Спасибо @villiwalla за код. Эта функция используется для того чтобы заменить входящие русские символы на английские PHP: function replaceSymbolRuToLat($symbol) { $symbolsRu = [ 'a' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'kh', 'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ъ' => '"', 'ы' => '0', 'ь' => '0', 'э' => 'uh', 'ю' => 'yu', 'я' => 'ya', ]; $symbol = mb_strtolower($symbol); return $symbolsRu[$symbol]; echo $symbolsRu[$symbol]; } это сам код на странице где выводятся категории HTML: <?php require_once "../config/function.php"; $sql = 'SELECT * FROM categories'; $lastChar = null; foreach ($conndb->query($sql) as $row): if ($lastChar !== ($currentChar = mb_convert_case(mb_substr($row['category_name'], 0, 1), CASE_UPPER))): $lastChar = $currentChar; ?> <h1 class="bukva" id="bukva_<? echo replaceSymbolRuToLat($lastChar); ?>"><? echo mb_convert_case($lastChar, CASE_LOWER); ?></h1> <?php endif; ?> <a href="http://localhost/menu_general/masters_page/masters/masters.php"> <div class="kategoriya"> <div class="kolichestvo">0</div> <?php echo $row['category_name'] . "\t"; ?> </div> </a> <?php endforeach; ?> только тут надо исправить чтобы функция выводила первую букву А в id="bukva_<? echo replaceSymbolRuToLat($lastChar); ?>"