![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 8.02.2017 Ostrzeżenie: (0%) ![]() ![]() |
mam problem z funkcją usort, wykonałem proste przykłady gdy tablica była podana w kodzie i funkcja działała ale gdy wykonałem klasę, która tworzy tablicę niestety to nie działa i nie wiem dlaczego, mam informację, że odwołuję się do obiektu, który nie jest tablicą a usort wymaga tablicy ale przecież to jest tablica tylko generowana - pewnie gdzieś tu jest klucz ale nie mogę go znaleźć. Potrzebuję posortować po kolumnie, poniżej kod:
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Naucz sie podawac dokladnie jak brzmi komunikat i w jakiej dokladnie linii...
f ($a[$key] == $b[$key]) { $a i $b to obiekty a ty sie do nich odwolujesz jak do tablic. Powinno byc $a->wynagrodzenie, reszta anaalogicznie
Powód edycji: [nospor]:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jeśli używasz PHP7, to możesz to zrobić bardziej elegancko:
W starszym PHP wystarczy zamienić <=> na znak minus i też zadziała, bo to liczby. Poza tym masz literówkę: wynagrodznie No i ostatnia rzecz, takie składanie kilku tablic w jedną tablicę tablic/obiektów po indeksach jest bardzo mało intuicyjne. Lepiej gdybyś miał osobną tablicę dla każdego użytkownika zamiast tablicy imion, tablicy nazwisk itd. Ten post edytował SmokAnalog 19.03.2018, 12:44:03 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 8.02.2017 Ostrzeżenie: (0%) ![]() ![]() |
dziękuję bardzo SmokAnalog mam akurat starą wersję 5.3 ale minus działa...
rozumiem, że chciałem wrzucić tablicę a powinienem się odwołać do obiektu więc Osoba $osobaA pobiera obiekt o kolejnym indeksie ze wskazaniem na wynagrodzenie i porównuje do obiektu $osobaB, tylko nie rozumiem dlaczego ten minus działa (IMG:style_emoticons/default/sad.gif) jeszcze przy sortowaniu
tutaj wszystko jest dla mnie jasne ale przy minusie niestety nie (IMG:style_emoticons/default/sad.gif) ale dziękuję (IMG:style_emoticons/default/smile.gif) pozdrawiam |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Funkcje używane jako argument do sortowania nie ograniczają się do -1, 0 i 1. Jakakolwiek ujemna wartość zadziała jak -1, a jakakolwiek dodatnia wartość zadziała jak 1. Zauważ, że przy A - B zachodzi taka sama zależność jak u Ciebie:
A - B = 0, gdy A = B A - B < 0, gdy A < B A - B > 0, gdy A > B Ty sortujesz malejąco, więc masz te znaki odwrotnie. Operator <=> ma taką zaletę, że zadziała nie tylko na liczbach. Zwraca -1, 0 lub 1 w zależności od tego która strona jest większa. Kiedyś wymyśliłem metodę na zapamiętanie czy powinno się zwrócić -1 czy 1. Otóż funkcja dla sortowania odpowiada na pytanie: Czy te elementy powinno się zamienić miejscami? Możliwe odpowiedzi to: TAK (1), NIE (-1), NIE WIEM (0). I tak na przykładzie Twojego kodu:
Jeżeli osoba A ma większe wynagrodzenie niż osoba B, wtedy funkcja zwraca wartość dodatnią. Oznacza to, że zamieniamy miejscami A i B, mając teraz B i A. I to się zgadza, bo B < A, czyli posortowaliśmy rosnąco. Ten post edytował SmokAnalog 19.03.2018, 22:33:43 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 8.02.2017 Ostrzeżenie: (0%) ![]() ![]() |
naprawdę super jasno to przekazałeś - dziękuję bardzo (IMG:style_emoticons/default/smile.gif)
p.s. nie dajesz przypadkiem korepetycji z php jeśli tak to bardzo bym chciał usystematyzować wiedzę i podziałać z przykładami itd... |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Możemy coś zorganizować (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.09.2025 - 00:38 |