Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie tablicy wg własnego wzoru
netvalue
post
Post #1





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

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


Witam

  1.  
  2. array(1) { ["myarr"]=> array(5) {
  3. [0]=> array(5) { ["symbol"]=> string(6) "EUR" ["desc"]=> string(6) "da" }
  4. [1]=> array(5) { ["symbol"]=> string(6) "USD" ["desc"]=> string(6) "adad" }
  5. [2]=> array(5) { ["symbol"]=> string(6) "CHF" ["desc"]=> string(6) "das23" }
  6. [3]=> array(5) { ["symbol"]=> string(6) "GBP" ["desc"]=> string(6) "dd12" }
  7. [4]=> array(5) { ["symbol"]=> string(6) "NOR" ["desc"]=> string(6) "233" }
  8. }
  9. }
  10.  


potrzebuje posortować ja symbol ale w kolejności takiej:
NOR, USD, EUR, CHF , GBP

Próbowałem z usort ale w tym przypadku chyba sie nie przyda...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
freemp3
post
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


usort jak najbardziej sie przyda. W funkcji porównującej wystarczy stworzyć tablicę, gdzie kluczami będą skróty walut, a wartościami wagi ważności, np dla NOR będzie 1, a dla EUR będzie 3. Możesz porówywać wagi i na podstawie wyniku zwracać wartość.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
buliq
post
Post #3





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


dlaczego się nie przyda?


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
sowiq
post
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Zawsze możesz swoją tablicę przekonwertować do takiego formatu:
  1. array(1) {
  2. ["myarr"]=> array(5) {
  3. ["EUR"]=> array(5) { ["symbol"]=> string(6) "EUR" ["desc"]=> string(6) "da" }
  4. ["USD"]=> array(5) { ["symbol"]=> string(6) "USD" ["desc"]=> string(6) "adad" }
  5. ["CHF"]=> array(5) { ["symbol"]=> string(6) "CHF" ["desc"]=> string(6) "das23" }
  6. ["GBP"]=> array(5) { ["symbol"]=> string(6) "GBP" ["desc"]=> string(6) "dd12" }
  7. ["NOR"]=> array(5) { ["symbol"]=> string(6) "NOR" ["desc"]=> string(6) "233" }
  8. }
  9. }


A później już chyba wiadomo jak to wydrukować (bo zakładam, że o to chodzi). Takie rozwiązanie będzie ciut bardziej optymalne niż sortowanie i łatwiejsze w implementacji.

Ale tak jak zostało napisane wcześniej - usort zrobi robotę.

Ten post edytował sowiq 6.08.2013, 09:01:23
Go to the top of the page
+Quote Post
netvalue
post
Post #5





Grupa: Zarejestrowani
Postów: 199
Pomógł: 2
Dołączył: 9.06.2008

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


zrobiłem wiec funkcje do uasort($myarr , 'sort_myarr')

  1.  
  2. function sort_myarr($a, $b) {
  3.  
  4. static $sizes = array( 'NOR' => 0, 'USD' => 1, 'EUR' => 2, 'CHF' => 3, 'GBP' => 4);
  5.  
  6.  
  7. return $sizes[$a] - $sizes[$b];
  8. }


ale niestety nie sortuje
Go to the top of the page
+Quote Post
freemp3
post
Post #6





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Na pewno nie zadziała. W zmiennej a oraz b są elementy tablicy, a w Twoim przypadku są to tablice. Instrukcja:
  1. $sizes[$a]

rzutuje tablice w zmiennej a na string czego rezultatem będzie
  1. $sizes['Array']

Po drugie, odejmowanie także nie ma prawa zadziałać. Funkcja ma zwrócić 1 jeśli a jest większe od b, -1 jeśli b jest większe od a lub 0 jeśli a i b są równe.

Aby to rozwiązać należy z zmiennych a i b wczytać wartość kluczy symbol i następnie przy pomocy if-ów porównać wagi tych wartości i zwrócić odpowiednią wartość.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
sowiq
post
Post #7





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Cytat(freemp3 @ 6.08.2013, 11:27:11 ) *
Po drugie, odejmowanie także nie ma prawa zadziałać. Funkcja ma zwrócić 1 jeśli a jest większe od b, -1 jeśli b jest większe od a lub 0 jeśli a i b są równe.

Kolego, gwoli ścisłości, nie masz racji. Wartości zwracane to nie "-1", "0", "1", tylko "mniej niż zero", "0", "więcej niż zero". Więc równie dobrze zamiast -1 możesz zwracać -2, -999 czy -312. Ale -0.9 już nie.

Cytat
The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.


Cytat
Caution Returning non-integer values from the comparison function, such as float, will result in an internal cast to integer of the callback's return value. So values such as 0.99 and 0.1 will both be cast to an integer value of 0, which will compare such values as equal.


Go to the top of the page
+Quote Post
freemp3
post
Post #8





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Fakt, przepraszam, za wprowadznie w błąd.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 15:39