Portrety Uliczne Nieznajomych - zobacz wyjątkową galerię portretów z warszawskich ulic
ZALOGUJ SIĘ
login:
hasło:
przypomnij hasło
załóż konto użytkownika
(i zobacz kilka porad gratis)
   
WYSZUKIWARKA I DZIAŁY
całe porady  tytuły
zaznacz działy do przeszukania
(brak wyboru = wszystkie działy)
PHP
MySQL >
PostgreSQL
SQLite
Perl
Java
XML
XSLT
XPath
WML
SVG
RegExp
Wyszukiwarki
Ochrona
VBScript
Google Plus
XHTML/CSS
JavaScript
Grafika
Flash
Photoshop
Windows
Linux
Bash
Apache
Procmail
E-biznes
Explorer
Opera
Firefox
Inne porady
   
KURSY, DOKUMENTACJE
Własne:
XHTML/CSS
JavaScript
ActionScript
WML, RSS, SSI
Pozostałe:
PHP
MySQL
Java API
więcej...
   
użytkowników online: 13
W CZYM MOGĘ POMÓC?


   
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

   
GALERIA FOTOGRAFII
   
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

Opis

void 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:

0: 6
1: 5
2: 3
3: 2
4: 1

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;
   }
  
  
/* Statyczna funkcja porównująca */
  
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:

b
c
d

Patrz także: uasort(), uksort(), sort(), asort(), arsort(),ksort(), natsort() i rsort().




User Contributed Notes

sydney 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

 

 
  © 1996-2012 & Reporter.plmiejscao serwisieabonamentwarunki korzystaniaRSSkontakt