|
użytkowników online: 13
|
OPINIE UŻYTKOWNIKÓW
|
Prawdziwa skarbnica wiedzy na temat tworzenia stron WWW i nie tylko. Korzystam z porad praktycznie codziennie, jest mi to niezbędne w mojej pracy. Sam zajmuję się tworzeniem serwisów, ale porady pisane przez Darka sa dla mnie nieocenioną pomocą! Proste, czytelne i zrozumiałe dla każdego! Czekam na więcej!
Krzysztof Szypulski
KESS - projektowanie stron
|
|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
usort (PHP 3 >= 3.0.3, PHP 4, PHP 5) usort --
Sortuje tablicę według wartości korzystając ze zdefiniowanej przez
użytkownika funkcji porównującej
Opisvoid usort ( array &tablica, callback funkcja_porównująca )
Funkcja ta posortuje tablicę według jej wartości korzystając z podanej
przez użytkownika funkcji porównującej. Jeśli chcesz posortować tablicę
według skomplikowanych kryteriów, to powinieneś użyć tej funkcji.
Funkcja porównująca musi zwracać liczbę całkowitą mniejszą, równą lub
większą od zera jeśli pierwszy argument jest odpowiednio mniejszy, równy
lub większy niż drugi.
Notatka:
Jeśli wynikiem porównania dwóch elementów tablicy jest równość, ich
kolejność w posortowanej tablicy pozostaje niezdefiniowana. Od PHP
4.0.6 funkcje zdefiniowane przez użytkownika mogły utrzymywać
początkową kolejność tych elementów, lecz nowy algorytm sortowania
wprowadzony w PHP 4.1.0 czyni to uniemożliwym i nie ma wydajnego
sposobu na rozwiązanie tego problemu.
Zwraca TRUE w przypadku sukcesu, FALSE w
przypadku porażki.
Przykład 1. Przykład użycia usort() |
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
while (list($key, $value) = each($a)) {
echo "$key: $value\n";
}
?>
|
Powyższy przykład wyświetli: |
Notatka:
Oczywiście w tym prostym przykładzie lepiej jest skorzystać z funkcji
sort().
Przykład 2.
Przykład użycia usort() do sortowania
wielowymiarowych tablic
|
<?php
function cmp($a, $b)
{
return strcmp($a["owoc"], $b["owoc"]);
}
$owoce[0]["owoc"] = "cytryny";
$owoce[1]["owoc"] = "jabłka";
$owoce[2]["owoc"] = "winogrona";
usort($owoce, "cmp");
while (list($key, $value) = each($owoce)) {
echo "\$owoce[$key]: " . $value["owoc"] . "\n";
}
|
Sortując tablicę wielowymiarową, $a i $b zawierają referencję do
pierwszego indeksu tablicy.
Powyższy przykład wyświetli: $owoce[0]: cytryny
$owoce[1]: jabłka
$owoce[2]: winogrona |
|
Przykład 3.
Przykład użycia usort() używając funkcji składowej
obiektu
|
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
function cmp_obj($a, $b)
{
$al = strtolower($a->name);
$bl = strtolower($b->name);
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
uasort($a, array("TestObj", "cmp_obj"));
foreach ($a as $item) {
print $item->name . "\n";
}
|
Powyższy przykład wyświetli: |
Patrz także: uasort(),
uksort(), sort(),
asort(),
arsort(),ksort(),
natsort() i rsort().
User Contributed Notessydney at totoche dot org
16-Jan-2006 10:44
Instead of doing :
$strc = strcmp( strtolower($a[$f]), strtolower($b[$f]) );
you could do this :
$strc = strcasecmp( $a[$f], $b[$f] );
which is more efficient and is does case insensitive comparison according to the current locale.
sean at NOSPAM dot orwd dot com
23-Sep-2005 11:46
In order to get a proper text sorting I have changed the arfsort() function submitted by jonathan(at)inetz(dot)com.
The one line I have changed is:
<?php
$strc = strcmp( $a[$f], $b[$f] );
?>
to
<?php
$strc = strcmp( strtolower($a[$f]), strtolower($b[$f]) );
?>
It can now sort correctly for alphabetization. Capital letters where getting in the way.
Sean
Tim
22-Sep-2005 04:25
A couple examples here advocate the use of 'create_function' for sorting, which is tempting to use because of the limitations of usort. But beware this method -- the function created will NOT be freed at the end of the sorting routine, which creates a memory leak. For this reason, this method should probably never be used.
If you need multi-key or other complex sorting, the fundamental problem is passing in parameters into the comparison routine. I suggest creating a global variable (_array_key_multisort_parameters or something long), and controlling the comparison routine in that way.
markus dot meier at udo dot edu
15-Sep-2005 09:00
@Jeremy Swinborne:
The same can be achieved by usort and will be much faster, too:
<?php
function SortByName($a, $b) {
if ($a['name'] == $b['name']) return 0;
return return ($a['name'] < $b['name']) ? -1 : 1;
}
usort($test, 'SortByName');
?>
markus dot meier at udo dot edu
15-Sep-2005 08:53
gk at lka dot hu:
I've removed a few errors and moved both functions into one. The line with the prefix-check did'nt work right.
<?php
function CompareUmlaut($astring, $bstring) {
$ALP = "Aa
|