данные из базы в формате UTF-8 - сортировка

Мутник

Новичок
кодировки

Забираю данные из базы в формате UTF-8.

хочу сделать сортировку по первому символу какой то ячейки, чтобы на выходе получилось нечто наподобие такого:

PHP:
$result[e] = array(
  [0] => egor
  [1] => erofej
)
$result[я] = array(
  [0] => яма
  [1] => якорь
)
$result[з] = array(
  [0] => зима
  [1] => забор
)
$result[l] = array(
  [0] => login
  [1] => leto
)
т.е. первая буква - элемент результативного массива. Столкнулся с тем, что при руском языке некорректно из за юникодовой кодировки работает. Проблема в том, что на сервере нет функций iconv.

подскажите, как можно с этим бороться...

P.S. про mb функции знаю, что то с ними тоже не получается...

меня интересует то, как найти первый символ строки, что то наподобие
PHP:
substr($str, 0, 1);
только чтобы было ок.
 

_RVK_

Новичок
Мутник
В последнем номере PHP!nside есть статья как конвертировать из UTF без iconv
 

vladax

Новичок
меня интересует то, как найти первый символ строки, что то наподобие
substr($str, 0, 1);
только чтобы было ок.
смотри в мане описание оператора LIKE

$letters = array('а', 'б', 'в', 'г', 'д', 'е'); // etc.

foreach ($letters as $v) {
$result = mysql_query("SELECT some_item FROM table WHERE some_item LIKE '$v%'");
while ($row=mysql_fetch_array($result)) echo $row['some_item'].'<br>';
?><br><?
}
 

_RVK_

Новичок
Да, для индексов массивов, как и для имен переменных, кирилицу не советую использовать.
 

Мутник

Новичок
2vladax

А ты считаешь, что 33+27 запросов в базу данных это нормально???? Мне кажется, что все надо немного по-другому сделать ;(

на тему использования кириллицы в индексах -а как избежать этого, если мне надо алфавит где то хранить + значения...

Если подскажете иной способ - буду благодарен. А так просто сказать "ТАК НЕ ДЕЛАЙ" - лучше уж ничего не говорить...
 

_RVK_

Новичок
Мутник
Храни алфавит в другом массиве. Или в одном где каждый элемент будет массив, первый элемент которого это буква, а второй это массив слов на эту букву. Вариантов масса. То что пхп многое позволяет, это еще не значит что нужно кидаться это сразу использовать.
Да и не забывай что нечисловые индексы массивов должны заключаться в кавычки.
 

vladax

Новичок
А ты считаешь, что 33+27 запросов в базу данных это нормально???? Мне кажется, что все надо немного по-другому сделать ;(
Абсолютно нормально, если ты не будешь грузить в массивы Мегабайты. У тебя так любой запрос ляжет. Не надо параноить!
 

_RVK_

Новичок
А ты считаешь, что 33+27 запросов в базу данных это нормально
А тебе они все сразу нужны? Я так понимаю ты хочешь сделать алфавитный указатель? Поясни задачу.

-~{}~ 14.01.05 10:37:

Абсолютно нормально
Ты действительно считаешь что 60 запросов, пусть и быстрых, для формирования страницы это номально?
 

Мутник

Новичок
2_RVK_

нет, они мне нужны все сразу, в том то идело. Да, алфавитный указатель, только с JS и раскидать все по слоям.. чтобы сделать одну загрузку, а потом просто слои менять. Там не будет много данных, поэтому интересует именно этот способ.
 

_RVK_

Новичок
Мутник
Поняно. Тогда дуйствительно лучше запихнуть все в массив.
Еще вопросы есть?

-~{}~ 14.01.05 10:48:

Мутник
Кстати, можно и не пихать в массив, а сразу на вывод. Просто сначала отсортировать ORDER BY.
 

vladax

Новичок
Ты действительно считаешь что 60 запросов, пусть и быстрых, для формирования страницы это номально?
Многие программеры выводят огромные деревья рекурсивными запросами и не парятся. Но в этом случае оператор LIKE конечно же несколько тормозной фактор, но не на столько, чтобы отказываться от его удобства и изобретать немыслимые велосипеды.
Мутник, ты бы попробовал сначала, а потом растекался.
 

_RVK_

Новичок
vladax
Многие программеры используются NestedSets как раз для того что бы получать деревья одним запросом.
Количество запросов более 20 для формирования одной страницы действительно вызывают у меня параною.
 

Мутник

Новичок
блин, да я ж задал вопрос....... на него и нужен ответ... Можно втупую через тот же самый like но это не решение проблемы... вернее, решение, но через ОДНО место...
 

vladax

Новичок
Многие программеры используются NestedSets как раз для того что бы получать деревья одним запросом.
Слава Богу и я отношусь к их числу :)
_RVK_
Ты бы код нарисовал для наглядности своего подхода и явил миру чудо.
 

_RVK_

Новичок
блин, да я ж задал вопрос
Тебе ответили и даже больше. Алгоритм конвертирования из утф в вин смотри в журнале. Как получить первый символ смотри [m]substr[/m]. В чем еще вопрос?

-~{}~ 14.01.05 11:10:

Ты бы код нарисовал для наглядности своего подхода и явил миру чудо
??? Какого подхода?
 

SiMM

Новичок
Интересно, нафига в UTF-8 мучаться с несколькими запросами, когда всё и так должно работать (если, конечно, речь не идёт о регистронезависимой сортировке, т.е. буква а идёт за буквой Я, и на букву ё можно наплевать). В крайнем случае - использовать BINARY
 

Мутник

Новичок
ок, а что выдаст такая запись от строки на русском языке, если строка в UTF-8???

substr($str, 0, 1);
 

SiMM

Новичок
Мутник, такая запись для UTF-8 лишена всякого смысла. Если конечно substr не поддерживает мультибайнтых кодировок. Сортируй по substr($str, 0, 2) - эффект будет не хуже (если кроме кириллицы и латиницы в тексте больше ничего нет).
 

Мутник

Новичок
а что сейчас, по-твоему будет????

PHP:
$str = "cdr";
echo substr($str, 0, 2);
Будет "cd"; а мне надо "c";

просто если это русский язык, то обрезать 2 символа, если английский - то один. Или я неправ?
 
Сверху