Подскажите, почему не работает такой код?
$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. Не подскажите почему так?
Оно то работать будет, только с однобайтовыми кодировками и 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); //абвгд
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости