2013-09-27 6 views
3

У меня есть вопрос .. У меня есть массив латышских слов (т.е. Agita Matīsa, Āris Matisovičs, Baiba Matisone), и мне нужно отсортировать этот массив в алфавитном порядке ... Так что я не знаю, как чтобы сделать это, потому что это не обычный латинский алфавит ... может onyone помочь мне? здесь некоторый код, который описывает, как я получаю этот массив:PHP латышского массив слов сортировочных

foreach($pacienti as $key => $val) 
         { 
          $person = array(); 
          foreach($val as $p) 
          { 
           $person[] = $p; 
          } 
          $person = array_unique($person); 


          foreach($person as $pac) 
          { 
           if ($key != null) 
            $div_patienti .= "<div id='".$key."' class='filial_r15'>".$pac."</div>";  
          } 

         } 

UPD1

здесь значение массива:

array(1) { [0]=> string(36) "agita&nbsp;matīsa&nbsp;080569-11863" } array(1) { [0]=> string(35) "aija&nbsp;matīsa&nbsp;240938-11562" } 

ответ

3

Установите локаль на латышский язык, а затем Сортируйте массив, используя флаг SORT_LOCALE_STRING.

setlocale(LC_ALL, 'lv_LV'); 
sort($array, SORT_LOCALE_STRING); 

В качестве альтернативы, вы можете использовать usort с strcoll в качестве локали-чувствительных сравнения строк, если вы хотите сделать какой-то пользовательской сортировки, основанный на комплексной ключевой структуры.

setlocale(LC_ALL, 'lv_LV'); 
usort($array, function($a, $b) { 
    return strcoll($a['key'], $b['key']); 
}); 

PS - если это выходит из базы данных, вероятно, лучше, чтобы установить БД для обработки (Latin-2?) Набор символов/сортировки, так что вы можете вытащить ваши данные в правильном порядке.

+0

Я добавил Setlocale к моему PHP скрипт ... но мне кажется, что-то оленья кожа работа = ( – vladimir

+0

все данные поступают из db, но я не могу изменить его сортировки или что-то еще в нем = ( – vladimir

+0

@ vladimir - Вы уверены, что используете сортируемый массив? 'Sort' требует 1-мерного массива. .. http://php.net/manual/en/function.sort.php - если у вас больше измерений, вы должны использовать 'usort' –

0

Вы должны изменить коллокацию на utf8_unicode_ci, которая правильно сортирует символы латинского акцента. Если Вы не можете изменить базу данных, что может быть сделано на лету:

SET NAMES 'utf8_latvian_ci'; 

SELECT keyword 
FROM ctest 
ORDER BY CONVERT(keyword USING ucs2) COLLATE ucs2_latvian_ci, 
CONVERT(keyword USING ucs2) COLLATE ucs2_bin ASC; 

Источник: http://laacz.lv/2010/10/28/ka-ieks-mysql-sakartot-latviesu-burtus-pareiza-seciba/

+0

Я не могу изменить свою БД ... – vladimir

Смежные вопросы