arnoldziq Poziom 23

Joined: 14 Apr 2006 Posts: 2934 Location: High Wycombe
|
#6
03 Feb 2012 00:18 Re: [PHP] Sortowanie tablic wielowymiarowych |
|
|
|
Z setlocale jest jeden problem :/
Nie działa... Przynajmniej nie do końca.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <?php echo '<br> Nieposortowana : <br>'; $array=array('Łysiak', 'Markowski','Nowak','Śliwiński','Antkowiak','Łukaszewicz','Kowalski','Staruch', 'Szczepaniak', 'Świdlik'); var_export($array); setlocale(LC_COLLATE, 'pl_PL.utf8'); usort($array, 'strcoll'); echo '<br> Posortowana jako pl_PL.utf8 : <br>'; var_export($array); setlocale(LC_COLLATE, 'pl_PL'); usort($array, 'strcoll'); echo '<br> Posortowana jako pl_PL : <br>'; var_export($array); setlocale(LC_COLLATE, 'Polish'); usort($array, 'strcoll'); echo '<br> Posortowana jako Polish : <br>'; var_export($array); ?> </body></html>
A wynik jest taki :
| Quote: |
Nieposortowana :
array ( 0 => 'Łysiak', 1 => 'Markowski', 2 => 'Nowak', 3 => 'Śliwiński', 4 => 'Antkowiak', 5 => 'Łukaszewicz', 6 => 'Kowalski', 7 => 'Staruch', 8 => 'Szczepaniak', 9 => 'Świdlik', )
Posortowana jako pl_PL.utf8 :
array ( 0 => 'Antkowiak', 1 => 'Kowalski', 2 => 'Markowski', 3 => 'Nowak', 4 => 'Staruch', 5 => 'Szczepaniak', 6 => 'Łukaszewicz', 7 => 'Łysiak', 8 => 'Śliwiński', 9 => 'Świdlik', )
Posortowana jako pl_PL :
array ( 0 => 'Antkowiak', 1 => 'Kowalski', 2 => 'Markowski', 3 => 'Nowak', 4 => 'Staruch', 5 => 'Szczepaniak', 6 => 'Łukaszewicz', 7 => 'Łysiak', 8 => 'Śliwiński', 9 => 'Świdlik', )
Posortowana jako Polish :
array ( 0 => 'Antkowiak', 1 => 'Kowalski', 2 => 'Łukaszewicz', 3 => 'Łysiak', 4 => 'Śliwiński', 5 => 'Świdlik', 6 => 'Markowski', 7 => 'Nowak', 8 => 'Staruch', 9 => 'Szczepaniak', ) |
----- EDIT -----
Ale problem jest ciekawy, więc wymyśliłem sobie coś takiego :)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <?php function sortpopolskawemu($s1, $s2) { $search = array('Ę','Ó','Ą','Ś','Ł','Ż','Ź','Ć','Ń','ę','ó','ą','ś','ł','ż','ź','ć','ń'); $replace = array('E','O','A','S','L','Z','Z','C','N','e','o','a','s','l','z','z','c','n'); return strcmp( str_ireplace($search, $replace, $s1), str_ireplace($search, $replace, $s2) ); } function sortpopolsku($s1, $s2) { $search = array('Ę','Ó','Ą','Ś','Ł','Ż','Ź','Ć','Ń','ę','ó','ą','ś','ł','ż','ź','ć','ń'); $replace = array('E'.chr(255),'O'.chr(255),'A'.chr(255),'S'.chr(255), 'L'.chr(255),'Z'.chr(254),'Z'.chr(255),'C'.chr(255), 'N'.chr(255),'e'.chr(255),'o'.chr(255),'a'.chr(255), 's'.chr(255),'l'.chr(255),'z'.chr(255),'z'.chr(255), 'c'.chr(255),'n'.chr(255)); return strcmp( str_ireplace($search, $replace, $s1), str_ireplace($search, $replace, $s2) ); } echo '<br> Nieposortowana : <br>'; $array=array('Łysiak','Zajdel', 'Markowski','Nowak','Śliwiński','Antkowiak','Łukaszewicz','Kowalski','Staruch', 'Szczepaniak', 'Świdlik'); var_export($array); echo '<br> Posortowana (sortpopolskawemu): <br>'; uasort($array, 'sortpopolskawemu'); var_export($array); echo '<br> Posortowana (sortpopolsku): <br>'; uasort($array, 'sortpopolsku'); var_export($array); ?> </body></html>
A wynik, wydaje mi się, jest całkiem zadowalający.
| Quote: |
Nieposortowana :
array ( 0 => 'Łysiak', 1 => 'Zajdel', 2 => 'Markowski', 3 => 'Nowak', 4 => 'Śliwiński', 5 => 'Antkowiak', 6 => 'Łukaszewicz', 7 => 'Kowalski', 8 => 'Staruch', 9 => 'Szczepaniak', 10 => 'Świdlik', )
Posortowana (sortpopolskawemu):
array ( 5 => 'Antkowiak', 7 => 'Kowalski', 6 => 'Łukaszewicz', 0 => 'Łysiak', 2 => 'Markowski', 3 => 'Nowak', 4 => 'Śliwiński', 8 => 'Staruch', 10 => 'Świdlik', 9 => 'Szczepaniak', 1 => 'Zajdel', )
Posortowana (sortpopolsku):
array ( 5 => 'Antkowiak', 7 => 'Kowalski', 6 => 'Łukaszewicz', 0 => 'Łysiak', 2 => 'Markowski', 3 => 'Nowak', 8 => 'Staruch', 9 => 'Szczepaniak', 4 => 'Śliwiński', 10 => 'Świdlik', 1 => 'Zajdel', ) |
|
|