Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
1

Сортировка строк по алфавиту НЕ по первой букве (номер буквы указывается пользователем)

25.05.2019, 15:57. Показов 4222. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Столкнулся с такой задачей: Требуется отсортировать массив строк по k-ой букве.
При помощи функции asort() можно отсортировать массив строк по первой букве, но вот как мне это сделать по второй, третьей или же десятой, к примеру, букве?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2019, 15:57
Ответы с готовыми решениями:

Сортировка по алфавиту по первой букве
Есть массив считывающийся с клавиатуры Как сделать сортировку по алфавиту по первой букве???...

Сортировка слов по первой букве по алфавиту в тексте
Вывести слова русского текста в алфавитном порядке по первой букве. Слова, начинающиеся с новой...

Отсортировать слова по алфавиту по первой букве
Господа программисты помогите пожалуйста решить задачку в qbasic : ))Условие : ввести 3 любых...

Ввести строку, вывести слова по алфавиту (по первой букве)
Ввести строку, вывести слова по алфавиту (по первой букве). Как будеть выглядеть код ?

10
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
25.05.2019, 16:30 2
PHP
1
2
3
4
5
6
7
8
9
<?php
$names = ['Вася', 'Петя', 'Гоша', 'Дима', 'По', 'Кто-то ещё'];
$num = 3; // Номер буквы
 
usort($names, function($v1, $v2) use ($num) {
    return mb_substr($v1, $num -1, 1) > mb_substr($v2, $num - 1, 1) ? 1 : -1;
});
 
var_dump($names);
1
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
25.05.2019, 16:36  [ТС] 3
Jodah, если вас не затруднит, поясните, пожалуйста, как это работает

Добавлено через 4 минуты
И работает почему-то странно...
Считываю строки из файла, вот они:

мама
сергей
полка
шкаф
обои
петрович
артемий
яблоко
банан

А сортирует по второй литере так:
array(9) { [0]=> string(14) "сергей " [1]=> string(10) "шкаф " [2]=> string(14) "яблоко " [3]=> string(16) "артемий " [4]=> string(10) "банан" [5]=> string(10) "мама " [6]=> string(10) "обои " [7]=> string(12) "полка " [8]=> string(18) "петрович " }
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
25.05.2019, 16:36 4
Imperion, в usort вторым параметром передаётся функция, в которую PHP передаёт параметры для сравнения. По каким параметрам сравнивать - решаете вы. Нужно только вернуть из функции:
1 если $v1 > $v2
0 если $v1 == $v2
-1 если $v1 < $v2

Ну и mb_substr вырезает символ по его порядковому номеру.
1
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
25.05.2019, 16:38  [ТС] 5
Ну вот он сам код, немного подправил под свои переменные, но почему-то не работает так, как должен
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if( isset( $_POST['get_result'] ) )
        {
            $name = $_POST['name'];   //Считываем имя файла из поля ввода
            $k = $_POST['k'];
            
            if (file_exists($name)) 
            {
                $arr = file($name);
                
                usort($arr, function($v1, $v2) use ($k) {
                    return mb_substr($v1, $k -1, 1) > mb_substr($v2, $k - 1, 1) ? 1 : -1;
                });
                
                var_dump($arr);
            }
            else
                echo "Исходный файл с именем <b>".$name."</b> не найден!"; 
        }
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
25.05.2019, 16:41  [ТС] 6
Ввожу абсолютно любые номера литер 1, 2, 3 - при любом раскладе сортируется неверно, сам файл прикрепил к этому комментарию
Вложения
Тип файла: txt q.txt (114 байт, 1 просмотров)
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
25.05.2019, 16:41 7
Imperion,

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$names = [
    'мама',
    'сергей',
    'полка',
    'шкаф',
    'обои',
    'петрович',
    'артемий',
    'яблоко',
    'банан'
];
$num = 2; // Номер буквы
 
usort($names, function($v1, $v2) use ($num) {
    return mb_substr($v1, $num -1, 1) > mb_substr($v2, $num - 1, 1) ? 1 : -1;
});
 
foreach($names as $name)
    echo $name . '<br>';
Результат:
Код
банан
мама
обои
яблоко
сергей
петрович
шкаф
полка
артемий
Скиньте сюда результат var_dump($arr) до сортировки.
0
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
25.05.2019, 16:45  [ТС] 8
Jodah, array(9) { [0]=> string(10) "мама " [1]=> string(14) "сергей " [2]=> string(12) "полка " [3]=> string(10) "шкаф " [4]=> string(10) "обои " [5]=> string(18) "петрович " [6]=> string(16) "артемий " [7]=> string(14) "яблоко " [8]=> string(10) "банан" }

Добавлено через 48 секунд
Последовательность та же, что и в файле, кодировка везде utf-8
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
25.05.2019, 16:53 9
Лучший ответ Сообщение было отмечено Imperion как решение

Решение

Imperion, добавьте в начало скрипта:
PHP
1
mb_internal_encoding("UTF-8");
1
-44 / 2 / 3
Регистрация: 22.12.2015
Сообщений: 508
25.05.2019, 16:55  [ТС] 10
Jodah, сработало!) Чтож за попа боль то с этими кодировками на php)
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
25.05.2019, 17:04 11
Imperion, в версии PHP 5.6, вышедшей 5 лет назад, этой проблемы нет.
0
25.05.2019, 17:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2019, 17:04
Помогаю со студенческими работами здесь

Преобразовать строку, отсортировав слова по первой букве (по алфавиту)
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие...

Сортировка по первой букве
Здравствуйте! Я читаю текстовой файл, разбиваю его на слова и записываю в коллекцию. Далее с этой...

Сортировка по первой букве
С клавиатуры вводятся три любых слова на русском языке. Программа отсортировывает их по алфавиту.

Сортировка по первой букве в строке.
Здравствуйте. Есть запись в базе mediumtext, сама запись - это контент странички, что-то типа...

Сортировка слов в строке по первой букве
Добрый день. У меня такой вопрос: как можно отсортировать слова (могут содержать как буквы так и...

Сортировка массива слов по первой букве
Доброго времени суток! Нужно получить текст, в котором слова исходного текста упорядочены по первой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru