ugrás a tartalomhoz

Tömb rendezés őű gondok

Qkac · 2007. Okt. 23. (K), 01.06
Sziasztok,
asort()-tal szeretnék rendezni egy tömböt, pl elemei:

1. a
2. b
3. c
4. d
5. á
6. ő
7. ű

Eredményként az ő meg az ű a lista elejére kerül, az á meg az egész végére... szóval nem szeretni a magyar ékezeteket, tud valaki megoldást?
köszi!
 
1

usort?

lacy · 2007. Okt. 23. (K), 14.40
Attól tartok ehhez nincs beépített függvény amely kezeli az ékezeteket, így sztem usort-al kellene kezdeni valamit. Amúgysem asort kellene, hanem simán sort, mivel nincsenek megadva kulcsok. Sztem.

usort -- tömböt rendez elemértékei alapján egy felhasználó összehasonlító függvénnyel
2

sort

Qkac · 2007. Okt. 23. (K), 22.39
a 'sort' biztos nem jó, mivel több tömb függ össze, így nem változhat meg a tömb kulcsa..
3

uasort

Qkac · 2007. Okt. 23. (K), 23.06
Van itt ez az uasort gondolom az jó lenne, de nekem nem túlzottan egyértelmű a php.net-en a leírás.. Az érdekelne akkor, hogy hogy kell függvénnyel rendezni.
(php.net-ről):
function cmp ($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array (3, 2, 5, 6, 1);
usort ($a, "cmp");

amit ebből nem értek hogy mi itt a 0 meg a -1:1 és fogalmam nincs hogy lehetne átírni egy sima abc rendezésre, ahol az ő ű betűk is szerepet játszanak jah és a kis nagy betűket sem kéne külön raknia.
4

sort_flags: SORT_LOCALE_STRING + setlocale()

razielanarki · 2007. Okt. 24. (Sze), 00.37
használd a *sort() függvények második paraméterét:
bool asort ( array &array [, int sort_flags] )
a második paraméter leírása a php manual sort () bejegyzéséből:
SORT_REGULAR - compare items normally (don't change types)
SORT_NUMERIC - compare items numerically
SORT_STRING - compare items as strings
SORT_LOCALE_STRING - compare items as strings, based on the current locale. Added in PHP 4.4.0 and 5.0.2. It uses the system locale, which can be changed using setlocale()

és (pl) így állítod magyarra a lokalitást stringek összehasonlításához
(itt többféle módon is megadtam neki -> win/linux másképp kezeli elvileg :)
setlocale (LC_COLLATE, 'hu_HU', 'hun_HUN', 'hun');
5

Ott a pont

Qkac · 2007. Okt. 24. (Sze), 00.49
Háhááá! köszönet, tudtam hogy valami ilyesmi lesz, énis erre gondoltam, próbáltam is a sort_flags-t csak a php.net-en a magyar leírásbol valahogy kimaradt a setlocal.... érdekes :D köszi szépen!
6

Magyar abc szerinti rendezés

Balogh Tibor · 2007. Okt. 24. (Sze), 17.03
Egy saját megvalósítás, ha mégsem lenne megfelelő a setlocale féle rendezés:

  function strcmp_hun($s1, $s2){
    //Az ékezetes és a kis- nagybetűk nem különbözőek. A kétjegyű betűk az egyjegyűek után. A kettőzött betűknek külön-külön kell szerepelniük.
    static $chr = array('á'=>'a', 'é'=>'e', 'í'=>'i', 'ó'=>'o', 'ö'=>'oz', 'ő'=>'oz', 'ú'=>'u', 'ü'=>'uz', 'ű'=>'uz', 'cs'=>'cz', 'zs'=>'zz', 'ccs'=>'czcz', 'ggy'=>'gzgz', 'lly'=>'lzlz', 'nny'=>'nznz', 'ssz'=>'szsz', 'tty'=>'tztz', 'zzs'=>'zzzz');
    return strcmp(strtr(mb_strtolower($s1), $chr), strtr(mb_strtolower($s2), $chr));
  }

  uasort($array, 'strcmp_hun');
7

abc rendezés

Qkac · 2007. Okt. 29. (H), 00.09
Köszi a kódot! A setlocalos megoldás sem úgy működött ahogy szerettem volna, ezt még nem próbáltam de mindjárt 'sort' kerítek rá! höhö
8

Magyar abc szerinti rendezés

Qkac · 2007. Okt. 29. (H), 01.51
static $chr = array('á'=>'az','á'=>'az','Á'=>'az', 'é'=>'ez', 'é'=>'ez' ,'É'=>'ez' ,'í'=>'iz','í'=>'iz', 'Í'=>'iz','ó'=>'oz','ó'=>'oz','Ó'=>'oz', 'ö'=>'oz','ö'=>'oz','Ő'=>'oz', 'ő'=>'oz', 'ő'=>'oz','Ő' =>'oz', 'ú'=>'uz','ú'=>'uz', 'Ú'=>'uz','ü'=>'uz','ü'=>'uz','Ü'=>'uz', 'ű'=>'uz', 'Ű'=>'uz','ű'=>'uz','cs'=>'cz', 'zs'=>'zz', 'ccs'=>'czcz', 'ggy'=>'gzgz', 'lly'=>'lzlz', 'nny'=>'nznz', 'ssz'=>'szsz', 'tty'=>'tztz', 'zzs'=>'zzzz');  
return strcmp(strtr(mb_strtolower($s1), $chr), strtr(mb_strtolower($s2), $chr));  
   }
Nekem csak így működik, de még mindig nem az igazi... az 'ó'-nak az 'o' után kéne jönnie még az 'ö' -nek az 'ó' után az 'ő' -nek meg az 'ö' után, és ez nem működik... nem értem h. miért zk vannak a kódban... oz, uz stb. és hogy mitől függ hogy melyik lesz a nagyobb, mert próbáltam lecserélni karakter szerint h. pl. 'ö' => 'oz', 'ő' => 'ozz' meg betűrend szerint is h. ö' => 'oa', 'ő' => 'ob' de nem lesz jó a sorrend... hogy bírhatnám rá a helyes működésre? :) Köszi szépen! -jah és a sorrend úgy nem lesz jó, hogy az ő jól követi az ö-t de az 'o' az beugrik pl. közéjük és nem értem miért...
9

Balogh Tibor megoldása közelebb áll a magyar szabályokhoz

Táskai Zsolt · 2007. Okt. 29. (H), 11.41
az 'a' és az 'á' nem választadnó szét a rendezésben, hasonlóan még sok betűpárhoz. sajnos nem tudom pontos szabályt, hogy mi válik külön és mi nem, és most sem találtam online leírást erről (biztos van az MTA-nál vagy valahol), így jobb híjján én hiszek Tibornak.
11

Köszi a bizalmat!

Balogh Tibor · 2007. Okt. 29. (H), 15.10
Infó: helyesírási szabályzat, 11. kiadás.
10

helyes rendezés

_jan_ · 2007. Okt. 29. (H), 11.43
A kód helyesen rendezi a szavakat a magyar ábécé szerint, azaz nem különbözteti meg az "o"-t az "ó"-tól stb. Ha a szabályos rendezés a célod, akkor nem kell tovább variálnod vele :)
12

Rendezés és karakterkódolás

Balogh Tibor · 2007. Okt. 29. (H), 15.12
A kód utf8 használatakor működik helyesen.
13

nem utf8 esetén

pogacsa · 2008. Jún. 25. (Sze), 17.52
help!
Nem lehet ezen valamit módosítani, hogy ne csak utf8-ban működjön? :S
14

Ha azt szeretnéd, hogy külön

MIvan · 2009. Dec. 17. (Cs), 11.20
Ha azt szeretnéd, hogy külön kezelje az o ó ö ő betűket, ebben a sorrendben, akkor ennyit kell változtatnod: 'ó'=>'oz', 'ö'=>'ozz', 'ő'=>'ozzz'
15

Jó ötlet

vbence · 2009. Dec. 17. (Cs), 11.59
...de talán még jobb h éktelen betűk után beszúr sz egy nullást pl:
A0 0h0a0z0u0g0 0e0m0b0e0r0t0 0h0a0m0a0r0a0b0b0

Az ékezeteseket pedig 1,2,3 posztfixekkel jelölöd pl: ó = "o1", ö = "o2", ő = "o3"

így a visszakonvertálás is lehetséges az eredeti stringekre.
16

Már így is, hogy csak az

MIvan · 2009. Dec. 18. (P), 10.58
Már így is, hogy csak az ékezetes betűket cserélgeti, meglehetősen lassú (array_multisort()-hoz képest). Nagyon nem lenne jó, ha még az ékezet nélkülieket is cserélné.
Visszakovertálni pedig nincs mit, lévén az eredeti tömbben semmi nem változik.
17

Környezet

vbence · 2009. Dec. 18. (P), 12.11
Végigolvastama bejegyzéseket, de nem láttam igazán hol jön képbe a multisort. Milyen struktúrákat szeretnél rendezni?
18

Ilyeneket pl:Array ( [0]

MIvan · 2009. Dec. 21. (H), 11.17
Ilyeneket pl:
Array
(
    [0] => Array
        (
            [id] => 1
            [nev] => "Éva"
        )
    [1] => Array
        (
            [id] => 2
            [nev] => "Egon"
        )
    [2] => Array
        (
            [id] => 3
            [nev] => "Ádám"
        )
)
19

Usort

vbence · 2009. Dec. 21. (H), 11.30
Én Usortal probálkoznék... milyen mennyiségű rekordról van szó amúgy?
20

Usort()-tal sem gyorsabb mint

MIvan · 2009. Dec. 23. (Sze), 14.25
Usort()-tal sem gyorsabb mint uasort()-tal. Az strtr() miatt lassú.
Egyébként pár ezer rekord.
21

Cache

vbence · 2009. Dec. 24. (Cs), 00.36
No és ha az első 4 karakterből képeznél egy (32 bites) integert, ezeket hasonlítgetnád össze és csak egyezés esetén fordulnél a stringhet?
22

utf-8

nagyigergo · 2014. Május. 22. (Cs), 17.13
látom hogy 7 évvel ezelőtti a kód, de nekem ez még hiányzott:
mb_internal_encoding('UTF-8');