Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Sortowanie tablic poprzez PHP
northwest
post
Post #1





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Witam serdecznie,
Mam taką tablicę:
Array
(
[0] => 9.5|16|NAZWA|2219688|2012-03-01|1000|2005||LPG|6|2|3|4|6|40.00|10%|30.00|30.00|tak|30.00|1|0|0|0|0|10|0||0|
[1] => 8.15|26|NAZWA2|2219625|2012-03-01|1000|2005||LPG|6|1.8|2.7|3.6|5.4|36.00|10%|10.00|30.00|10.00|35.00|1|0|0|0|7|10|0||0|
[2] => 7.5|14|NAZWA3|2219663|2012-03-01|1000|2005||LPG|6|2|3|4|6|40.00|10%|30.00|30.00|tak|tak|1|0|0|0|0|10|0||0|
[3] => 7.15|27|NAZWA4|2219644|2012-03-01|1000|2005||LPG|6|2.2|3.3|4.4|6.6|40.00|10%|12.00|20.00|10.00|36.00|2|0|0|0|8|10|0||0|
[4] => 6.95|10|NAZWA5 |226442222|2012-03-01|1000|2005|0|LPG|6|1.4|2.1|2.8|4.2|24.00|10%|30.00|30.00|tak|nie|1|0|0|0|3|10|-1||0|
[5] => 6.7|23|NAZWA6|226444444|2012-03-01|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10%|10.00|20.00|tak|25.00|2|0|-1|0|9|10|0||0|
[6] => 6.5|24|NAZWA7|229622, 2219661|2012-03-01|1000|2005||LPG|6|2|3|4|6|40.00|10%|15.00|20.00|tak|25.00|1|0|0|0|5|10|0||0|
[7] => 6.2|21|NAZWA8|2219191|0000-00-00|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10.00%|tak|tak|tak|tak|2|0|-3|0|8|10|0||0|
[8] => 6.2|20|NAZWA9|226777777|2012-03-01|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10.00%|10.00|20.00|tak|30.00|2|0|0|0|0|10|0||0|
[9] => 5.8|13|NAZWA10 |2219662|2012-03-01|1000|2005||LPG|6|1.6|2.4|3.2|4.8|32.00|10%|10.00|20.00|tak|20.00|1|0|0|0|4|10|0||0|
[10] => 4.7|18|NAZWA11 |229623, 2219628|2012-03-01|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10%|15.00|20.00|tak|10.00|2|0|0|-3|0|10|0||0|
[11] => 4.65|15|NAZWA12 |2219668|2012-03-01|1000|2005||LPG|6|1.8|2.7|3.6|5.4|36.00|10%|tak|20.00|tak|tak|2|0|0|0|5|10|0||0|
[12] => 4.525|6|NAZWA13 |221005353|2012-03-01|1000|2005|0|LPG|6|1.3|1.95|2.6|3.9|24.00|10%|10.00|15.00|tak|tak|1|0|0|0|1|10|0||0|
[13] => 3.8|17|NAZWA14|26464646|2012-03-01|1000|2005||LPG|6|1.6|2.4|3.2|4.8|32.00|10%|tak|tak|tak|tak|1|0|0|0|6|10|0||0|
[14] => 3.85|9|NAZWA15|2219626|2012-03-01|1000|2005|0|LPG|6|2.2|3.3|4.4|6.6|40.00|10%|15.00|20.00|tak|nie|1|0|0|0|0|10|0||0|
[15] => 3.58|22|NAZWA16|2219669|2012-03-01|1000|2005||LPG|6|1.9|2.8|3.8|5.7|38.00|10%|tak|tak|tak|tak|1|0|0|1|0|10|0||0|
[16] => 3.48|25|NAZWA17|2219664|2012-03-01|1000|2005||LPG|6|2.2|3|4|6|40.00|10%|tak|tak|tak|tak|1|0|0|0|6|10|0||0|
[17] => 2.65|8|NAZWA18|2219459|2012-03-01|1000|2005|0|LPG|6|1.8|2.7|3.6|5.4|36.00|10%|tak|tak|tak|nie|1|0|0|0|2|10|0||0|
[18] => 10.7|19|NAZWA19|2219624|2012-03-01|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10%|20.00|25.00|tak|30.00|1|0|-3|0|7|10|0||0|
[19] => 1.875|7|NAZWA20|2219667|2012-03-01|1000|2005|0|LPG|6|1.5|2.25|3|4.5|30.00|10%|tak|tak|tak|nie|1|2|1|0|0|10|0||0|
[20] => 1.7|11|NAZWA21|228111111|2012-03-01|1000|2005|0|LPG|6|2.4|3.6|4.8|7.2|40.00|10%|15.00|20.00|nie|nie|1|0|1|0|0|10|0||0|
[21] => -122|28|NAZWA22|tel|2000-03-01|1000|2005|postoje|LPG|111|222|333|444|555|postoj|rabat|77|88|99|tak|2|-14|-6|4|9|10|0|www|1|
)

Muszę przesortować te wartości po 5,4,3 i 2 ostatnich polach (czyli od końca odliczając po "|"). Wiecie może jak to zrobić?
Próbuję z tym już od 2 dni, ale już nie mam pomysłów (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
-north-
post
Post #2





Goście







niestety nie pomogło:(

znalazłem taki kod:
  1. <?php
  2.  
  3. $tablica = array();
  4.  
  5. $tablica[0] = '9.5|16|NAZWA|2219688|2012-03-01|1000|2005||LPG|6|2|3|4|6|40.00|10%|30.00|30.00|tak|30.00|1|0|0|0|0|10|0||0|';
  6. $tablica[1] = '8.15|26|NAZWA2|2219625|2012-03-01|1000|2005||LPG|6|1.8|2.7|3.6|5.4|36.00|10%|10.00|30.00|10.00|35.00|1|0|0|0|7|10|0||0|';
  7. $tablica[2] = '7.5|14|NAZWA3|2219663|2012-03-01|1000|2005||LPG|6|2|3|4|6|40.00|10%|30.00|30.00|tak|tak|1|0|0|0|0|10|0||0|';
  8. $tablica[3] = '7.15|27|NAZWA4|2219644|2012-03-01|1000|2005||LPG|6|2.2|3.3|4.4|6.6|40.00|10%|12.00|20.00|10.00|36.00|2|0|0|0|8|10|0||0|';
  9. $tablica[4] = '6.95|10|NAZWA5 |226442222|2012-03-01|1000|2005|0|LPG|6|1.4|2.1|2.8|4.2|24.00|10%|30.00|30.00|tak|nie|1|0|0|0|3|10|-1||0|';
  10. $tablica[5] = '6.7|23|NAZWA6|226444444|2012-03-01|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10%|10.00|20.00|tak|25.00|2|0|-1|0|9|10|0||0|';
  11. $tablica[6] = '6.5|24|NAZWA7|229622, 2219661|2012-03-01|1000|2005||LPG|6|2|3|4|6|40.00|10%|15.00|20.00|tak|25.00|1|0|0|0|5|10|0||0|';
  12. $tablica[7] = '6.2|21|NAZWA8|2219191|0000-00-00|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10.00%|tak|tak|tak|tak|2|0|-3|0|8|10|0||0|';
  13. $tablica[8] = '6.2|20|NAZWA9|226777777|2012-03-01|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10.00%|10.00|20.00|tak|30.00|2|0|0|0|0|10|0||0|';
  14. $tablica[9] = '5.8|13|NAZWA10 |2219662|2012-03-01|1000|2005||LPG|6|1.6|2.4|3.2|4.8|32.00|10%|10.00|20.00|tak|20.00|1|0|0|0|4|10|0||0|';
  15. $tablica[10] ='4.7|18|NAZWA11 |229623, 2219628|2012-03-01|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10%|15.00|20.00|tak|10.00|2|0|0|-3|0|10|0||0|';
  16. $tablica[11] ='4.65|15|NAZWA12 |2219668|2012-03-01|1000|2005||LPG|6|1.8|2.7|3.6|5.4|36.00|10%|tak|20.00|tak|tak|2|0|0|0|5|10|0||0|';
  17. $tablica[12] ='4.525|6|NAZWA13 |221005353|2012-03-01|1000|2005|0|LPG|6|1.3|1.95|2.6|3.9|24.00|10%|10.00|15.00|tak|tak|1|0|0|0|1|10|0||0|';
  18. $tablica[13] ='3.8|17|NAZWA14|26464646|2012-03-01|1000|2005||LPG|6|1.6|2.4|3.2|4.8|32.00|10%|tak|tak|tak|tak|1|0|0|0|6|10|0||0|';
  19. $tablica[14] ='3.85|9|NAZWA15|2219626|2012-03-01|1000|2005|0|LPG|6|2.2|3.3|4.4|6.6|40.00|10%|15.00|20.00|tak|nie|1|0|0|0|0|10|0||0|';
  20. $tablica[15] = '3.58|22|NAZWA16|2219669|2012-03-01|1000|2005||LPG|6|1.9|2.8|3.8|5.7|38.00|10%|tak|tak|tak|tak|1|0|0|1|0|10|0||0|';
  21. $tablica[16] = '3.48|25|NAZWA17|2219664|2012-03-01|1000|2005||LPG|6|2.2|3|4|6|40.00|10%|tak|tak|tak|tak|1|0|0|0|6|10|0||0|';
  22. $tablica[17] = '2.65|8|NAZWA18|2219459|2012-03-01|1000|2005|0|LPG|6|1.8|2.7|3.6|5.4|36.00|10%|tak|tak|tak|nie|1|0|0|0|2|10|0||0|';
  23. $tablica[18] = '10.7|19|NAZWA19|2219624|2012-03-01|1000|2005||LPG|6|2.4|3.6|4.8|7.2|40.00|10%|20.00|25.00|tak|30.00|1|0|-3|0|7|10|0||0|';
  24. $tablica[19] = '1.875|7|NAZWA20|2219667|2012-03-01|1000|2005|0|LPG|6|1.5|2.25|3|4.5|30.00|10%|tak|tak|tak|nie|1|2|1|0|0|10|0||0|';
  25. $tablica[20] = '1.7|11|NAZWA21|228111111|2012-03-01|1000|2005|0|LPG|6|2.4|3.6|4.8|7.2|40.00|10%|15.00|20.00|nie|nie|1|0|1|0|0|10|0||0|';
  26. $tablica[21] = '-122|28|NAZWA22|tel|2000-03-01|1000|2005|postoje|LPG|111|222|333|444|555|postoj|rabat|77|88|99|tak|2|-14|-6|4|9|10|0|www|1|';
  27.  
  28. $tablica_sortowania = array();
  29.  
  30. foreach($tablica as $tresc)
  31. {
  32. $tablica_sortowania[] = explode("|",$tresc);
  33. }
  34.  
  35. echo "<pre>";
  36. print_r($tablica);
  37. echo "</pre>";
  38.  
  39. foreach($tablica_sortowania as $key => $row)
  40. {
  41. $five[$key] = strtotime($row[4]); // wartość z pola 5
  42. $four[$key] = $row[3]; // wartość z pola 4
  43. $three[$key] = $row[2]; // wartość z pola 3
  44. $two[$key] = $row[28]; // wartość z pola przed ostatniego
  45. $one[$key] = $row[29]; // wartość z pola ostatniego
  46. }
  47.  
  48. array_multisort($five, SORT_ASC, $four, SORT_ASC, $three, SORT_ASC, $two, SORT_ASC, $one, SORT_ASC, $tablica_sortowania);
  49.  
  50. $tablica = array();
  51.  
  52. foreach($tablica_sortowania as $row)
  53. {
  54. $tablica[] = implode("|",$row);
  55. }
  56.  
  57. echo "<pre>";
  58. print_r($tablica);
  59. echo "</pre>";
  60.  
  61. ?>


ten kod z multisort działa extra dla nazwy...

tylko w przypadku gdy mam:
$t1[$key] = $row[11];
array_multisort($t1, SORT_ASC, $tablica_sortowania);

to sortuje jakoś dziwnie: 1.30 , 2.40, 1.60, 1.80, 2.40, 2.00

Wiecie może dlaczego tak jest? dlaczego nie sortuje poprawnie?
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: 13.10.2025 - 21:00