Sortowanie tablic!


Ogl±dasz archiwaln± wersję tematu "Sortowanie tablic!" z forum pl.comp.www.server-side


Krzysztof Trybowski - 1 Mar 2003, 20:37

Hej wszystkim,

Mam problem: jak posortować tablicę bez zwracania uwagi na wielko¶ć
liter? sort(array) sortuje wg kodów ascii, czyli najpierw lec± duże litery,
potem małe. Poza tym chciałbym, żeby uwzględnione były polskie znaki...
natcasesort nie działa w ogóle... Widziałem gdzies tak± procedurę usort,

Pomocy!

Pozdrawiam,



Marcin ``MySZ`` Sztolcman - 2 Mar 2003, 11:35


Mam problem: jak posortować tablicę bez zwracania uwagi na wielko¶ć
liter? sort(array) sortuje wg kodów ascii, czyli najpierw lec± duże
litery, potem małe. Poza tym chciałbym, żeby uwzględnione były polskie
znaki... natcasesort nie działa w ogóle... Widziałem gdzies tak±
procedurę



w jakim sensie nie dziala ci natcasesort ? z pliterkami siem nie dziwie,
zazwyczaj tak jest (nawet po zmianie locali), ale nie uwzgledniajac tego
powinno smigac ;)

co do pliterek - chyba tylko wlasne rozwiazanie wchodzi w gre. lub
szukaj na necie ;)

        MySZ


Krzysztof Trybowski - 2 Mar 2003, 12:44


w jakim sensie nie dziala ci natcasesort ? z pliterkami siem nie dziwie,
zazwyczaj tak jest (nawet po zmianie locali), ale nie uwzgledniajac tego
powinno smigac ;)



może Ľle uzywałem teog netsortu, ale w ogóle nic nie sortował.

co do pliterek - chyba tylko wlasne rozwiazanie wchodzi w gre. lub
szukaj na necie ;)



Siedziałem dzisiaj długo w nocy i co¶ wymodziłem. Działa, ale nie jest
chyba zbyt eleganckie. Proszę o jaki¶ komentarz. Funkcje pl_cmp podaję jako
parametr funkcji usort i korzysta ona z funkcji pl_strtoupper, któr±

do manuala PHP... Zwłaszcza intersuje mnie jak ten kod skrócić i upro¶cić,
bo przecież podobne jego fragmenty powtarzam 2 razy.

function pl_cmp($a, $b) {
$a=pl_strtoupper($a);
$b=pl_strtoupper($b);
for ($i=0;$i<=(strlen($a)-1);$i++) {
        $cc=ord($a{$i})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $c[$i]=sprintf("%04d",$cc);

}



for ($j=0;$j<=(strlen($b)-1);$j++) {
        $cc=ord($b{$j})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $d[$j]=sprintf("%04d",$cc);
}



$a=implode("",$c);
$b=implode("",$d);
return (strcoll ($a, $b));

}



function pl_strtoupper($my_string)
{
return strtr(strtoupper($my_string), "ęó±¶łżÄ˝ćń", "ĘÓË‡Â¦ŁŻÂ¬ĆŃ");

}



--
 / Krzysztof Trybowski  pgp 0xF8C68208 /--/    Polska Strona Programu |
/ www.thebat.i.krakow.pl  uin 4350719 /--/  The Bat! http://thebat.pl |


Krzysztof Trybowski - 2 Mar 2003, 15:50


w jakim sensie nie dziala ci natcasesort ? z pliterkami siem nie dziwie,
zazwyczaj tak jest (nawet po zmianie locali), ale nie uwzgledniajac tego
powinno smigac ;)



może Ľle uzywałem teog netsortu, ale w ogóle nic nie sortował.

co do pliterek - chyba tylko wlasne rozwiazanie wchodzi w gre. lub
szukaj na necie ;)



Siedziałem dzisiaj długo w nocy i co¶ wymodziłem. Działa, ale nie jest
chyba zbyt eleganckie. Proszę o jaki¶ komentarz. Funkcje pl_cmp podaję jako
parametr funkcji usort i korzysta ona z funkcji pl_strtoupper, któr±

do manuala PHP... Zwłaszcza intersuje mnie jak ten kod skrócić i upro¶cić,
bo przecież podobne jego fragmenty powtarzam 2 razy.

function pl_cmp($a, $b) {
$a=pl_strtoupper($a);
$b=pl_strtoupper($b);
for ($i=0;$i<=(strlen($a)-1);$i++) {
        $cc=ord($a{$i})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $c[$i]=sprintf("%04d",$cc);

}



for ($j=0;$j<=(strlen($b)-1);$j++) {
        $cc=ord($b{$j})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $d[$j]=sprintf("%04d",$cc);
}



$a=implode("",$c);
$b=implode("",$d);
return (strcoll ($a, $b));

}



function pl_strtoupper($my_string)
{
return strtr(strtoupper($my_string), "ęó±¶łżÄ˝ćń", "ĘÓË‡Â¦ŁŻÂ¬ĆŃ");

}



--
 / Krzysztof Trybowski  pgp 0xF8C68208 /--/    Polska Strona Programu |
/ www.thebat.i.krakow.pl  uin 4350719 /--/  The Bat! http://thebat.pl |



Krzysztof Trybowski - 2 Mar 2003, 15:52


w jakim sensie nie dziala ci natcasesort ? z pliterkami siem nie dziwie,
zazwyczaj tak jest (nawet po zmianie locali), ale nie uwzgledniajac tego
powinno smigac ;)



może Ľle uzywałem teog netsortu, ale w ogóle nic nie sortował.

co do pliterek - chyba tylko wlasne rozwiazanie wchodzi w gre. lub
szukaj na necie ;)



Siedziałem dzisiaj długo w nocy i co¶ wymodziłem. Działa, ale nie jest
chyba zbyt eleganckie. Proszę o jaki¶ komentarz. Funkcje pl_cmp podaję jako
parametr funkcji usort i korzysta ona z funkcji pl_strtoupper, któr±

do manuala PHP... Zwłaszcza intersuje mnie jak ten kod skrócić i upro¶cić,
bo przecież podobne jego fragmenty powtarzam 2 razy.

function pl_cmp($a, $b) {
$a=pl_strtoupper($a);
$b=pl_strtoupper($b);
for ($i=0;$i<=(strlen($a)-1);$i++) {
        $cc=ord($a{$i})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $c[$i]=sprintf("%04d",$cc);

}



for ($j=0;$j<=(strlen($b)-1);$j++) {
        $cc=ord($b{$j})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $d[$j]=sprintf("%04d",$cc);
}



$a=implode("",$c);
$b=implode("",$d);
return (strcoll ($a, $b));

}



function pl_strtoupper($my_string)
{
return strtr(strtoupper($my_string), "ęó±¶łżÄ˝ćń", "ĘÓË‡Â¦ŁŻÂ¬ĆŃ");

}



--
 / Krzysztof Trybowski  pgp 0xF8C68208 /--/    Polska Strona Programu |
/ www.thebat.i.krakow.pl  uin 4350719 /--/  The Bat! http://thebat.pl |


Krzysztof Trybowski - 2 Mar 2003, 16:25


w jakim sensie nie dziala ci natcasesort ? z pliterkami siem nie dziwie,
zazwyczaj tak jest (nawet po zmianie locali), ale nie uwzgledniajac tego
powinno smigac ;)



może Ľle uzywałem teog netsortu, ale w ogóle nic nie sortował.

co do pliterek - chyba tylko wlasne rozwiazanie wchodzi w gre. lub
szukaj na necie ;)



Siedziałem dzisiaj długo w nocy i co¶ wymodziłem. Działa, ale nie jest
chyba zbyt eleganckie. Proszę o jaki¶ komentarz. Funkcje pl_cmp podaję jako
parametr funkcji usort i korzysta ona z funkcji pl_strtoupper, któr±

do manuala PHP... Zwłaszcza intersuje mnie jak ten kod skrócić i upro¶cić,
bo przecież podobne jego fragmenty powtarzam 2 razy.

function pl_cmp($a, $b) {
$a=pl_strtoupper($a);
$b=pl_strtoupper($b);
for ($i=0;$i<=(strlen($a)-1);$i++) {
        $cc=ord($a{$i})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $c[$i]=sprintf("%04d",$cc);

}



for ($j=0;$j<=(strlen($b)-1);$j++) {
        $cc=ord($b{$j})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $d[$j]=sprintf("%04d",$cc);
}



$a=implode("",$c);
$b=implode("",$d);
return (strcoll ($a, $b));

}



function pl_strtoupper($my_string)
{
return strtr(strtoupper($my_string), "ęó±¶łżÄ˝ćń", "ĘÓË‡Â¦ŁŻÂ¬ĆŃ");

}



--
 / Krzysztof Trybowski  pgp 0xF8C68208 /--/    Polska Strona Programu |
/ www.thebat.i.krakow.pl  uin 4350719 /--/  The Bat! http://thebat.pl |


Krzysztof Trybowski - 2 Mar 2003, 16:40


w jakim sensie nie dziala ci natcasesort ? z pliterkami siem nie dziwie,
zazwyczaj tak jest (nawet po zmianie locali), ale nie uwzgledniajac tego
powinno smigac ;)



może Ľle uzywałem teog netsortu, ale w ogóle nic nie sortował.

co do pliterek - chyba tylko wlasne rozwiazanie wchodzi w gre. lub
szukaj na necie ;)



Siedziałem dzisiaj długo w nocy i co¶ wymodziłem. Działa, ale nie jest
chyba zbyt eleganckie. Proszę o jaki¶ komentarz. Funkcje pl_cmp podaję jako
parametr funkcji usort i korzysta ona z funkcji pl_strtoupper, któr±

do manuala PHP... Zwłaszcza intersuje mnie jak ten kod skrócić i upro¶cić,
bo przecież podobne jego fragmenty powtarzam 2 razy.

function pl_cmp($a, $b) {
$a=pl_strtoupper($a);
$b=pl_strtoupper($b);
for ($i=0;$i<=(strlen($a)-1);$i++) {
        $cc=ord($a{$i})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $c[$i]=sprintf("%04d",$cc);

}



for ($j=0;$j<=(strlen($b)-1);$j++) {
        $cc=ord($b{$j})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $d[$j]=sprintf("%04d",$cc);
}



$a=implode("",$c);
$b=implode("",$d);
return (strcoll ($a, $b));

}



function pl_strtoupper($my_string)
{
return strtr(strtoupper($my_string), "ęó±¶łżÄ˝ćń", "ĘÓË‡Â¦ŁŻÂ¬ĆŃ");

}



--
 / Krzysztof Trybowski  pgp 0xF8C68208 /--/    Polska Strona Programu |
/ www.thebat.i.krakow.pl  uin 4350719 /--/  The Bat! http://thebat.pl |


Krzysztof Trybowski - 2 Mar 2003, 17:04


w jakim sensie nie dziala ci natcasesort ? z pliterkami siem nie dziwie,
zazwyczaj tak jest (nawet po zmianie locali), ale nie uwzgledniajac tego
powinno smigac ;)



może Ľle uzywałem teog netsortu, ale w ogóle nic nie sortował.

co do pliterek - chyba tylko wlasne rozwiazanie wchodzi w gre. lub
szukaj na necie ;)



Siedziałem dzisiaj długo w nocy i co¶ wymodziłem. Działa, ale nie jest
chyba zbyt eleganckie. Proszę o jaki¶ komentarz. Funkcje pl_cmp podaję jako
parametr funkcji usort i korzysta ona z funkcji pl_strtoupper, któr±

do manuala PHP... Zwłaszcza intersuje mnie jak ten kod skrócić i upro¶cić,
bo przecież podobne jego fragmenty powtarzam 2 razy.

function pl_cmp($a, $b) {
$a=pl_strtoupper($a);
$b=pl_strtoupper($b);
for ($i=0;$i<=(strlen($a)-1);$i++) {
        $cc=ord($a{$i})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $c[$i]=sprintf("%04d",$cc);

}



for ($j=0;$j<=(strlen($b)-1);$j++) {
        $cc=ord($b{$j})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $d[$j]=sprintf("%04d",$cc);
}



$a=implode("",$c);
$b=implode("",$d);
return (strcoll ($a, $b));

}



function pl_strtoupper($my_string)
{
return strtr(strtoupper($my_string), "ęó±¶łżĽćń", "ĘÓˇ¦ŁŻ¬ĆŃ");

}



Przy czym w ostatniej funkcji polskie znaki powinny być w ISO.

Tę wiadomo¶ć musiałem wysyłać parę razy, bo debilne cancelboty kasuj± posty
w UTF-8, a z kolei we wklejonej funkcji miałem znaki w ISO, które wklejone
bezpo¶rednio w okno Dialoga powoduj± wysłanielistu w tym formacie -
sk±din±d bardzo prawidłowo. Dlaczego w 2003 roku wci±ż jeszcze kasuje się
posty w UTF-8? Przecież to bez sensu!

Pozdrawiam,


Krzysztof Trybowski - 2 Mar 2003, 17:07


w jakim sensie nie dziala ci natcasesort ? z pliterkami siem nie dziwie,
zazwyczaj tak jest (nawet po zmianie locali), ale nie uwzgledniajac tego
powinno smigac ;)



może Ľle uzywałem teog netsortu, ale w ogóle nic nie sortował.

co do pliterek - chyba tylko wlasne rozwiazanie wchodzi w gre. lub
szukaj na necie ;)



Siedziałem dzisiaj długo w nocy i co¶ wymodziłem. Działa, ale nie jest
chyba zbyt eleganckie. Proszę o jaki¶ komentarz. Funkcje pl_cmp podaję jako
parametr funkcji usort i korzysta ona z funkcji pl_strtoupper, któr±

do manuala PHP... Zwłaszcza intersuje mnie jak ten kod skrócić i upro¶cić,
bo przecież podobne jego fragmenty powtarzam 2 razy.

function pl_cmp($a, $b) {
$a=pl_strtoupper($a);
$b=pl_strtoupper($b);
for ($i=0;$i<=(strlen($a)-1);$i++) {
        $cc=ord($a{$i})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $c[$i]=sprintf("%04d",$cc);

}



for ($j=0;$j<=(strlen($b)-1);$j++) {
        $cc=ord($b{$j})*10;
        switch ($cc) {
                case 2020: $cc=695; break;
                case 2110: $cc=795; break;
                case 1610: $cc=655; break;
                case 1660: $cc=835; break;
                case 1630: $cc=765; break;
                case 1750: $cc=905; break;
                case 1720: $cc=907; break;
                case 1980: $cc=675; break;
                case 2090: $cc=785; break;
        }
        $d[$j]=sprintf("%04d",$cc);
}



$a=implode("",$c);
$b=implode("",$d);
return (strcoll ($a, $b));

}



function pl_strtoupper($my_string)
{
return strtr(strtoupper($my_string), "ęó±¶łżĽćń", "ĘÓˇ¦ŁŻ¬ĆŃ");

}



Przy czym w ostatniej funkcji polskie znaki powinny być w ISO.

Tę wiadomo¶ć musiałem wysyłać parę razy, bo debilne cancelboty kasuj± posty
w UTF-8, a z kolei we wklejonej funkcji miałem znaki w ISO, które wklejone
bezpo¶rednio w okno Dialoga powoduj± wysłanielistu w tym formacie -
sk±din±d bardzo prawidłowo. Dlaczego w 2003 roku wci±ż jeszcze kasuje się
posty w UTF-8? Przecież to bez sensu!

Pozdrawiam,


Jak wywalic z tablicy powtarzajace sie elementy?
Liczba elementów z tablicy - proste
duze tablice
Sesja i tablica
koszyk w tablicy
Tablice w php
* * * (nie mamy...)
  • czym jest spoleczenstwo obywatelskie 120
  • choroba psychiczna
  • cosas humor
  • gry na komorke torrent
  • rzemieB6lnik naprawiajacy wozy i bryczki
  • muzyka techno wikipedia
  • forum murator drenaz opaskowy
  • matt pokora
  • fifa 2006 world cup klucz
  • Kolekcja tematów z for dyskusyjnych ; Start