[php]sortowanie polskich liter

0

Jestem prawie pewnien, że to już było na tym forum, ale z całym szacoonem tutejsza wyszukiwarka jest do doopy :/

Odczytuje sobie dane (konkretnie nazwiska) z MySQL'a i sortuje je poleceniem sort(tablica)... i tu jest problem, polskie litery są zawsze na końcu (po Z).

Jak tego uniknąć, czyli posortować tablice tak żeby "Ą" było po "A", "Ł" po "L" itd ??

0

Napisz własną f-kcję porównującą, a potem skorzystaj z tego:

usort($tablica, "nazwa_Twojej-f-kcji_sortującej");

Czyli np. tak:

	function sort_hun($array)
	{
		usort($array, "huncmp");
		return($array);
	}

	function intcmp($a,$b,$ALP)
	{
		if ($a==$b) return 0;
		$ALPL = strlen($ALP);

		$ap = $bp = -1;
		$i = 0;

		while (($i < $ALPL) and (($ap == -1) or ($bp == -1)))
		{
			if ($ALP[$i] == $a) $ap = $i;
			if ($ALP[$i] == $b) $bp = $i;
			$i++;
		}

		return($ap < $bp) ? -1 :1;
	}

	function huncmp($astring, $bstring)
	{
		$ALP = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnOoÓóPpQqRrSsŚśTtUuVvWwXxYyZzŹźŻż";

		//jeśli równe
		if ($astring == $bstring) return 0;

		//wykonuj na kazdym elemencie
		for ($i = 0; $i < strlen($astring) && $i < strlen($bstring) && $astring[$i] == $bstring[$i]; $i++);

		//jeśli takie same lecz jedna krótsza
		if ($astring[$i] == $bstring[$i]) return (strlen($astring) > $bstring) ? -1 : 1;

		//pierwszy różny znak
		return(intcmp($astring[$i], $bstring[$i], $ALP));
	}

	$ize = array("Ćul", "Ączek", "Bączek", "Śluzówka", "Zarazka", "Lolesław", "Łolesław");
	$ize = sort_hun($ize);

	print_r($ize);

	echo "\nWynik: " . implode(", ", $ize) . ".";

Powyższa f-kcja pochodzi z komentarza na stronie php.net i została przeze mnie lekko zmodyf..

0

wielkie dzięki [soczek]

1 użytkowników online, w tym zalogowanych: 0, gości: 1