![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 8.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam problem z polskimi znakami podczas sortowania tablicy. Używam takiego kodu do sortowania: Kod function sortowanie($x, $y)
{ if ($x[1] == $y[1]) return 0; else if ($x[1] < $y[1]) return -1; else return 1; } usort($tablica, sortowanie); Skrypt sortuje "zwykłe" wyrazy w tablicy, a te zaczynające się na np. "ś", przerzuca na sam koniec tablicy. Wcale mu się nie dziwię, bo php nie wie gdzie w alfabecie znajduje się litera "ś". Czy jest jakiś sposób na poprawienie tego? Dzięki za odpowiedzi Pozdrawiam. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 115 Pomógł: 0 Dołączył: 3.05.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam!!!
mozesz sprobować najpierw zastąpić pierwsze literki tablicy (jesli sa polskie) np: ś -> sxzz, ć -> cxzz przesortować i potem spowrotem, ale to trochę naciągane i czaslochłonne. innych pomysłów nie mam ![]() -------------------- pozdrawiam bamboos
http://piorun.ds.pg.gda.pl/~ronek/log/jedyne.wma |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 8.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Nie zadobry pomysł, choć trafny
![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarząd Postów: 1 512 Pomógł: 2 Dołączył: 22.04.2002 Skąd: Koszalin ![]() |
posiedziałem trochę i oto jest mój pomysł na rozwiązanie Waszego problemu.
Mamy dwie tablice gdzie w jednej są wyrazy z polskimi literami zaś w drugiej bez polskich liter. Sortujemy druga tablicę (tą bez polskich) za pomoca funkcji asort() czyli należy przyczytać instrukcję. Następnie jest pętla do wyświetlenia posortowanej drugiej tablicy bez polskich znaków. Zamiast echo "$tablica2[$index]"; wstawiamy tablice z polskimi znakami gdzie zmienna $index określi który wyraz ma się wyświetlić. Przykład działania znajdziecie TUTAJ [php:1:6e967699f9] <?php $tablica[0]="słoń"; $tablica[1]="masło"; $tablica[2]="cień"; $tablica[3]="leżak"; $tablica2[0]="slon"; $tablica2[1]="maslo"; $tablica2[2]="cien"; $tablica2[3]="lezak"; asort($tablica2); foreach($tablica2 as $index => $polski) { echo "$tablica[$index] $polski<BR>"; } ?> [/php:1:6e967699f9] Zapewne ktoś zna lepszy sposób .... -------------------- brak sygnaturki rowniez jest sygnaturką
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 8.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki itsme. Podrasowałem trochę twój skrypt i wyszło mi coś takiego:
Kod <?
function sortowanie($tablica) { $i=0; foreach ($tablica as $wartosc) { $tablica2[$i] = strtr($wartosc, "ąćęłńśżźó", "acelnszxo"); $i++; } asort($tablica2); $i=0; foreach($tablica2 as $index => $xxx) { $tab[$i] = $tablica[$index]; $i++; } return $tab; } $tablica = sortowanie($tablica); //wyświetlenie posortowanej tablicy foreach ($tablica as $wartosc) { echo $wartosc; echo "<BR>"; } ?> Teraz trzeba tylko do funkcji sortowanie przekazać tablice i jest ok. Ale ja mam posortować tablice wielowymiarową. Muszę posiedzieć jeszcze nad tym skryptem i go ulepszyć. Jak to zrobię to umieszczę go tu. Swoją drogą to dziwne, że nikt nie ma na to gotowego projektu. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarząd Postów: 1 512 Pomógł: 2 Dołączył: 22.04.2002 Skąd: Koszalin ![]() |
Cytat $array[0]['name'] = "Niko";
zastosowalem rowniez taki kod
$array[0]['age'] = 24; $array[1]['name'] = "Dennis"; $array[1]['age'] = 34; //the fuction: function array_csort($marray, $column) { //coded by Ichier2003 foreach ($marray as $row) { $sortarr[] = $row[$column]; } array_multisort($sortarr, $marray); return $marray; } //just use it like that: $array = array_csort($array,"age"); [php:1:d8a36897dd]<?php function csort($array, $column){ $i=0; for($i=0; $i<count($array); $i++){ $sortarr[]=$array[$i][$column]; } array_multisort($sortarr, $array); return($array); } ?>[/php:1:d8a36897dd] Oba działąją pięknie -------------------- brak sygnaturki rowniez jest sygnaturką
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 8.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
itsme, czego wcześniej nie napisałeś, że ten twój kod działa też na polskie znaki, a ja tworzyłem swój
![]() Kod function sort_wielowymiar($tablica, $kolumna)
{ $i=0; foreach ($tablica as $wartosc) { $tablica2[$i] = strtr($wartosc[$kolumna], "ąćęłńśżźó", "acelnszxo"); $i++; } asort($tablica2); $i=0; $ile = count(array_keys($tablica[0])); foreach($tablica2 as $index => $xxx) { for ($x=0; $ile>$x; $x++) { $tab[$i][$x] = $tablica[$index][$x]; } $i++; } return $tab; } |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 296 Pomógł: 0 Dołączył: 9.05.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat itsme, czego wcześniej nie napisałeś, że ten twój kod działa też na polskie znaki, a ja tworzyłem swój
![]() Ale to nie załatwia sprawy, bo po sortowaniu wyjdzie [php:1:63d9380a96]<?php $posortowane = array("łańcuch", "laska", "łękotka"); ?>[/php:1:63d9380a96] a powinno [php:1:63d9380a96]<?php $posortowane = array("laska", "łańcuch", "łękotka"); ?>[/php:1:63d9380a96] czy array_multisort() radzi sobie z tym? -------------------- audaces fortuna iuvat!
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Przyjaciele php.pl Postów: 786 Pomógł: 0 Dołączył: 18.03.2002 Skąd: Wroclaw/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hej
@all: Olaboga.. Po co tak kombinowac ;) locale + strcoll Zapraszam: http://odothui.jukowski.com/t_79.php Pozdrawiam -------------------- .. make web your home ..
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Ja również nie mogę sobie z tym poradzić. Czy ktoś z bardziej wprawionych programistów mógłby poświęcić trochę czasu, aby rozwiązać nasz problem? Z góry bardzo dziękuję.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 296 Pomógł: 0 Dołączył: 9.05.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Kurtz już sprawę wyjaśnił. :wink:
[php:1:c97ed4ebc2]<?php setlocale(LC_COLLATE, "pl_PL"); ?>[/php:1:c97ed4ebc2] -------------------- audaces fortuna iuvat!
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym prosić o gotowy kod, który posortowałby mi taką tablicę:
nazwa_polska||nazwa_oryginalna||liczba_plyt||nazwa_pliku według pierwszej kolumny. Jestem początkujący, więc mam nadzieję, że ten post nikogo nie rozzłości. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Chciałbym prosić o gotowy kod, który posortowałby mi taką tablicę:
nazwa_polska||nazwa_oryginalna||liczba_plyt||nazwa_pliku według pierwszej kolumny. Jestem początkujący, więc mam nadzieję, że ten post nikogo nie rozzłości. Przecież pytałeś już jakiś czas temu o coś bardzo podobnego i dałem Ci wtedy gotowy skrypt bazujący na localach (praktycznie to samo rozwiązanie co podał teraz Kurtz). |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Ten skrypt mi nie działa. Próbowałem użyć go na dwóch różnych serwerach, ale bez skutku. Zna ktoś może jakiś inny sposób?
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Przyjaciele php.pl Postów: 786 Pomógł: 0 Dołączył: 18.03.2002 Skąd: Wroclaw/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hej
Cytat Ten skrypt mi nie działa. Próbowałem użyć go na dwóch różnych serwerach, ale bez skutku. Zna ktoś może jakiś inny sposób? sprawdz co zwraca funkcja setlocale. byc moze na serwerze gdzie testujesz rozwiazanei nie ma wogole polskich lokali albo wysteuje pod inna nazwa - np pl_PL.iso-8859-2 (home.pl bodjaze). Daj znac - jak to nie to bedziemy dalej kombinowali.
Pozdrawiam -------------------- .. make web your home ..
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Hmmm... Zrobiłem
echo (setlocale(LC_COLLATE, "pl_PL")); i pokazało się pl_PL. |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 31.03.2002 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Jeśli setlocale nic nie da, to spróbuj tego: [ link ] (pewnie zaraz zostanę obrzucony jajami, ale tym razem akurat to jest o tym
![]() -------------------- misiu | chór
"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku" Allen Holub |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Eh... Przeczytałeś dokładnie wszystkie posty? Prosiłem o skończony skrypt sortujący tablicę wielowymiarową...
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Przyjaciele php.pl Postów: 786 Pomógł: 0 Dołączył: 18.03.2002 Skąd: Wroclaw/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hej
Cytat Hmmm... Zrobiłem
Skopiuj i wklej skrypt do ktorego adres podalem. Sortuje wg polskich znakow czy nie?
echo (setlocale(LC_COLLATE, "pl_PL")); i pokazało się pl_PL. Pozdrawiam -------------------- .. make web your home ..
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 63 Pomógł: 0 Dołączył: 19.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Nie.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 4.05.2025 - 08:28 |