Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Różne wyniki sortowania w zależności od wersji PHP
soltysadam
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.12.2020

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


Cześć mam problem lub zagwostke. Mam taki kod który ma mi tablice posortować rosnąco jednak najpierw liczby parzyste a potem nieparzyste. Korzystam z funkcji usort. I teraz tak jak odpalam ten kod w PHP w wersji 5.4 to sortuje w taki sposób jak opisałem. Jednak w wersjach od 7 w góre sortuje, już od najmniejszej do największej po kolei. Z tego co znalazłem w sieci to i w wersji 5 jak i 7 usort korzysta z QuickSorta wiec nie wiem co może być przyczyną.
PS. Napisałem sobie ten warunek również w inny sposób i już poprawnie mi sortuje, jednak nie mam pojęcia czemu pierwszy zachowuje się w ten sposób

1. Wersja 1
  1.  
  2. $tab1 = [5, 7, 3, 1, 8, 2, 0, 4, 9, 6];
  3. echo "Zawarość tablicy przed posortowaniem\n";
  4.  
  5. foreach ($tab1 as $val) {
  6. echo $val;
  7. }
  8. usort($tab1, function($e1, $e2)
  9. {
  10. if ($e1 % 2 == 0 && $e2 % 2 != 0) {
  11. return -1;
  12. } elseif ($e1 % 2 != 0 && $e2 == 0) {
  13. return 1;
  14. } else {
  15. return $e1 - $e2;
  16. }
  17. }
  18. );
  19.  
  20. echo "\nTablica po posortowaniu:\n";
  21. foreach ($tab1 as $val) {
  22. echo $val;
  23. }
  24.  


Wersja poprawnie działająca
  1.  
  2. $tab1 = [5, 7, 3, 1, 8, 2, 0, 4, 9, 6];
  3. usort($tab1, function($e1, $e2)
  4. {
  5. if ($e1 % 2 == $e2 % 2) {
  6. return $e1 - $e2;
  7. }
  8. if ($e1 % 2 == 0) {
  9. return -1;
  10. }
  11. return 1;
  12. }
  13. );
  14.  
  15. foreach ($tab1 as $val) {
  16. echo $val;
  17. }


Ten post edytował soltysadam 25.10.2023, 12:23:58
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: 4.10.2025 - 22:57