![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 22.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
ostatnio dostałem do poprawy archaiczny serwis oparty na OSCommerce. Kolejną funkcjonalnością jaką dostałem do zrobienia ma być indeks autorów książek. Napisałem funkcję, która na podstawie tablicy nazwisk, tworzy alfabet (wybieram pierwsze literki, usuwam powtarzające sie i sortuje - sort()). Finalnie dostaję tablice literek na które są w bazie autorzy. Tzn brak pustych literek, na które nie ma autorów. Kod function theTrim(&$value) { $value = trim($value); } function theFirst(&$value) { $value = substr($value, 0, 1); } function theUpper(&$value) { $value = strtoupper($value); } function getLettersFromRecords($records) { $letters = array(); foreach($records as $record) { $value = $record['products_extra_fields_value']; $recordData = explode(';', $value); array_walk($recordData, 'theTrim'); if(substr($value, -1) == ';') array_pop($recordData); array_walk($recordData, 'theFirst'); foreach($recordData as $rd) { $letters[] = (string) $rd[0]; } } sort($letters); $letters = array_count_values($letters); $letters = array_keys($letters); array_shift($letters); array_walk($letters, 'theUpper'); return $letters; } Napotkałem następujący problem. Otóż admin dodał autorów np. na Ł, Ś, Ć i wyrzuciło mi je za Z. No ba, normalne zachowanie, gdyz taka jest zasada działania funkcji sort(). Doczytałem, że można dodać opcje SORT_STRING czy lepsza w tym wypadku dla mnie SORT_LOCALE_STRING, ale to mi nic nie da bo o ile byłyby tylko polskie znaki diakrytyczne to dobrze, ale pojawili się autorzy tacy jak np. "Šebek Jaroslav". Za nic nie może mi do głowy przyjść rozwiązanie tego problemu. Probowałem na siłę: Kod function stupidSort($array) { $sorted = array(); if(in_array("A", $array)) $sorted[] = "A"; if(in_array("Ą", $array)) $sorted[] = "Ą"; if(in_array("B", $array)) $sorted[] = "B"; if(in_array("C", $array)) $sorted[] = "C"; if(in_array("Ć", $array)) $sorted[] = "Ć"; if(in_array("D", $array)) $sorted[] = "D"; if(in_array("E", $array)) $sorted[] = "E"; if(in_array("Ę", $array)) $sorted[] = "Ę"; if(in_array("F", $array)) $sorted[] = "F"; if(in_array("G", $array)) $sorted[] = "G"; if(in_array("H", $array)) $sorted[] = "H"; if(in_array("I", $array)) $sorted[] = "I"; if(in_array("J", $array)) $sorted[] = "J"; if(in_array("K", $array)) $sorted[] = "K"; if(in_array("L", $array)) $sorted[] = "L"; if(in_array("Ł", $array)) $sorted[] = "Ł"; if(in_array("M", $array)) $sorted[] = "M"; if(in_array("N", $array)) $sorted[] = "N"; if(in_array("Ń", $array)) $sorted[] = "Ń"; if(in_array("O", $array)) $sorted[] = "O"; if(in_array("Ó", $array)) $sorted[] = "Ó"; if(in_array("P", $array)) $sorted[] = "P"; if(in_array("R", $array)) $sorted[] = "R"; if(in_array("S", $array)) $sorted[] = "S"; if(in_array("Ś", $array)) $sorted[] = "Ś"; if(in_array("Š", $array)) $sorted[] = "Š"; if(in_array("T", $array)) $sorted[] = "T"; if(in_array("U", $array)) $sorted[] = "U"; if(in_array("V", $array)) $sorted[] = "V"; if(in_array("W", $array)) $sorted[] = "W"; if(in_array("X", $array)) $sorted[] = "X"; if(in_array("Y", $array)) $sorted[] = "Y"; if(in_array("Z", $array)) $sorted[] = "Z"; if(in_array("Ź", $array)) $sorted[] = "Ź"; if(in_array("Ż", $array)) $sorted[] = "Ż"; return $sorted; } ale (nie znam się dobrze na sprawach związanych z encjami i kodowaniem) porównanie Kod in_array("Š", $tablica) daje false. Probowałem też z encją zamiast Š ale też nie działa. Czy ktoś może mi pomóc? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Jeżeli plik mam zapisany w utf-8 i cała stronę też to jakoś nie mam z tym problemu
![]() Ustaw wszędzie kodowanie utf-8 to pierwsza sprawa. Druga sprawa to czy nie warto powierzyć sortowanie bazie? -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 22.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Więc jeśli napewno będę miał kodowanie UTF-8 to wynikiem
Kod in_array("Š", $tablica) będzie true Sprawdzałeś to? Używam edytora Intype. Jaka jest różnica pomiędzy UTF-8 a UTF-8 Plain? Jak to powierzyć je bazie? Co przez to rozumiesz? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Tzn, że sortowanie powierzasz bazie. A potem robisz cos takiego.
Kod $lettersTab=array(); foreach($records as $rec) { $letter=mb_strtolower($rec['tekst'][0],'utf-8'); if(!in_array($letter, $lettersTab)) { $lettersTab[]=$letter; } } Sprawdzałem. Edytor to ked-2; -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
po jaką cholere tworzysz funkcje ktore robia dokladnie to samo co funkcja wewnątrz funkcji ![]() -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 22.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiedziałem czy orginały zadziałają w array_walk(). Tam mam przez referencje.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
o sorry, nie czytalem calego i nie zauwazylem arrray walku
-------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 09:54 |