Hi All! Есть задача отсортирвать список... Средствами MySQL не получается, так как в базе строки криптованы. Остается только скриптом PHP, перед выводом юзеру. Нет проблем - загоняем в массив. Сортируем - выводим - нет проблем, списки небольшие и все работает. Но... кирилица сортируется через ж..., абцд... и т.д. Строки в кодировке koi8r ессно... Как объяснить PHP что он сортирует кодировку koi8? Или есть какие -нить другие (гуманные) способы эту задачу решить?
Порыл поставил setlocale(LC_ALL,"ru_RU.koi8r") поссле чего порядок сортирвки функцией natcasesort изменился, но один фик непонятно на что... если кодировка cp1251 то почти идеально, тока буква Ё раньше буквы А, а тут ваще какя-то хрень... заморачиваться с перекодирокой koi8<->cp1251 чей-то совсем не хочетца... Локаль ru_RU.koi8r в системе есть одназначна... В чем туплю?
эх дык, ну ладна мутим (система под которой мутиться все линух слака 10-я) # locale -a из кучи высранного выбираем все что начинается с ru - надеюсь не предлагаете пробовать апсалютна все что есть - я этого не переживу и мутим простенький тестовый скриптик: <?php setlocale(LC_ALL,"ru_RU"); #setlocale(LC_ALL,"ru_RU.koi8r"); #setlocale(LC_ALL,"ru_RU.utf8"); #setlocale(LC_ALL,"ru_UA"); #setlocale(LC_ALL,"ru_UA.utf8"); $array = array("й<br>","ц<br>","у<br>","к<br>","е<br>","н<br>","г<br>","ш<br>","щ<br>","з<br>","х<br>", "ъ<br>","ф<br>","ы<br>","в<br>","а<br>","п<br>","р<br>","о<br>","л<br>","д<br>","ж<br>", "я<br>","ч<br>","с<br>","м<br>","и<br>","т<br>","ь<br>","б<br>","ю<br>","ё<br>","Й<br>", "Ц<br>","У<br>","К<br>","Е<br>","Н<br>","Г<br>","Ш<br>","Щ<br>","З<br>","Х<br>","Ъ<br>", "Ф<br>","Ы<br>","В<br>","А<br>","П<br>","Р<br>","О<br>","Л<br>","Д<br>","Ж<br>","Э<br>", "Я<br>","Ч<br>","С<br>","М<br>","И<br>","Т<br>","Ь<br>","Б<br>","Ю<br>","Ё<br>","1<br>", "10<br>","а10<br>","б1<br>"); natcasesort($array); print_r($array); ?> реально меняет сортировку только ru_RU, и то беспорядочно, а аостальное приводит к абцд...., тоесть фигня... То ли локаль в линухе криво стоит толи пхп ее криво отрабатывает
а вот отсюда поподробнее плз. С какой стороны пнуть его в печень чтоб он не вытворял подобного? ПХП юзается версии 4.3.10
Пересобрал... и тот же фиг Придетца видимо посмотреть в сторону strtr(), перекодировать сначала в ср1251 отсортировать а потом назад.... Абидна, дасадна, ну ладна....
Ну значит помучался я еще помучался.... и послал пхп, локаль и natcasesort бабаю нах и сделал так ---------------------------------- // ставим аглицкую локаль (благо есть везде и работает одинаково) setlocale(LC_ALL,"en.US"); // извлекаем строки из базы MySQL .... while (...) { // извлекаем строку ... // перекодируем $Str = strtr($Str,"аАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯ", "ёЁюабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"); // пихаем в массив .... } // сортируем массив asort($Text); // выводим из массива в отсортированном виде reset($Text); while (list($Key,$Str)=each($Text)) { // перекодируем обратно в исходное состояние $Str = strtr($Str,"ёЁюабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ", "аАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯ"); // выводим куда требовалось ..... } ----------------------------- Вот. Кривовато, но умнее ничего в голову не пришло, но зато работет...