Сортировка строки по алфавиту

262
20 июля 2018, 12:20

Подскажите, почему не работает такой код?

$string = "gfedcba";
for($i=0; $i<count($string); $i++){
    for($j=$i+1; $j<count($string); $j++){
        if($string[$i]>$string[$j]){
            $temp = $string[$j];
            $string[$j] = $string[$i];
            $string[$i] = $temp;
        }
    }
}

Насколько я знаю, строка уже является массивом. Но почему-то данный вариант кода не работает правильно. Нужно всё равно разбивать строку на массив с помощью str_split. Не подскажите почему так?

Answer 1

Оно то работать будет, только с однобайтовыми кодировками и str_split тоже.
Так-как, перемещение по $str[3] индексам символов строки - небезопасно в многобайтовой кодировке.

function str_sort($str) {
    $arr = array();
    for ($i = 0, $len = strlen($str); $i < $len; ++$i) {
        $arr[] = $str{$i};
    }
    sort($arr);
    return join($arr);
}
$string = "gfedcba";
echo str_sort($string); // abcdefg

Для работы с unicode, потребуется что-то типа такого:

function str_sort($string) {
    mb_internal_encoding('utf-8');
    $arr = array();
    while ($strlen = mb_strlen($string)) {
        $arr[] = mb_substr($string, 0, 1);
        $string = mb_substr($string, 1, $strlen);
    }
    sort($arr);
    return join($arr);
}
$string = "дгвба";
echo str_sort($string); //абвгд
READ ALSO
Что нужно сделать, чтобы информация в input, при обновлении страницы, не пропадала?

Что нужно сделать, чтобы информация в input, при обновлении страницы, не пропадала?

Мне нужно сделать так, чтобы на сайте не пропадала информация введенная в форму с input, но не знаю как это сделатьМожет есть какой-нибудь скрипт?...

223
Как добавить кнопки &ldquo;Последняя&rdquo; и &ldquo;Первая&rdquo;

Как добавить кнопки “Последняя” и “Первая”

Делал пагинацию для постов, получилось только сделать вывод номеров страниц, а мне еще нужно сделать кнопки , что бы переместиться на последнюю...

256
Знаки вопроса при запросе через Mysql на страницу php

Знаки вопроса при запросе через Mysql на страницу php

MySQL отправляет знаки вопроса вместо русских символовЯ уже везде где можно установил кодировку utf-8, везде уже писал SET NAMES utf-8 и htaccess создавал...

210