Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Funkcja uasort()
marcinek37
post
Post #1





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

Ostrzeżenie: (0%)
-----


Mam kod z manuala:
  1. <?php
  2. // Comparison function
  3. function cmp($a, $b) {
  4. if ($a == $b) {
  5. return 0;
  6. }
  7. return ($a < $b) ? -1 : 1;
  8. }
  9.  
  10. // Array to be sorted
  11. $array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
  12. print_r($array);
  13.  
  14. // Sort and print the resulting array
  15. uasort($array, 'cmp');
  16. print_r($array);
  17. ?>


Nie rozumiem, na czym polega funkcja "cmp".
Umieszcza się do niej dwie informacje, tj. $a i $b.

Jeśli $a to nazwy typu "a", "b" itd., a $b to 4, 1 itp. to skąd w kodzie jest coś takiego "$a == $b" - przecież literka nigdy nie będzie równa liczbie.
Czy ktoś może mi pokazać jakiś prosty przykład?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kreatiff
post
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Każde sortowanie polega na przyrównywaniu kolejnych elementów ze sobą i ustalanie ich pozycji w szeregu.
I do tego właśnie wykorzystuje się sortowanie szybkie dla kolejnych elementów sortowanej tablicy.

Funkcje sort itd. robią dokładnie to samo, tylko mają z góry zaprogramowane metody sortowania, że od największej do najmniejszej, że alfabetycznie, naturalnie, itp.

usort idzie dalej. Pozwala posortować coś, czego standardowe algorytmy sortowania PHP nam nie umożliwiają.
Wszystko co trzeba zrobić, to napisać małą funkcję, która dowolne dwa elementy porówna i zwróci wartość 0 (elementy są takie same), ujemną (pierwszy element będzie przed drugim, czyli jest "mniejszy") lub dodatnią (pierwszy będzie za drugim, czyli jest większy).

Jak w życiu natrafisz na problem posortowania czegoś, co nie będzie podchodziło pod żadną z gotowych funkcji sortowania, to z pomocą przyjdzie usort. Mój przykłąd użycia powyżej. Było tego więcej, ale teraz nie pamiętam już dokładnie.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 19:44