Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem z sortowaniem
lolek92
post 12.07.2008, 11:27:02
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 12.07.2008

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


Witam
Mam problem związany z sortowaniem według liczb.
Mam plik txt z zawartością:

Kod
   12|#|asd|#|audio
   1|#|cos innego|#|video
   10|#|jeszcze inne|#|audio
   22|#|text|#|audio


Skryot do wyswietlania:

  1. <?
  2. $filetop = "./dane.txt";
  3. $counttop = count(@file($filetop));
  4. $topile = 30;
  5. $iletop = 20;
  6. $liniatop = @file($filetop);
  7.  
  8. if($counttop<$topile){
  9. $topile2 = $counttop;
  10. }else{
  11. $topile2 = $topile;
  12. }
  13.  
  14. for( $x = 0; $x < $counttop; $x++ ){
  15. list($exp0[$x], $exp1[$x], $exp2[$x]) = explode("|#|", $liniatop[$x]);
  16. }
  17.  
  18. rsort($exp0);
  19.  
  20. $i = 0;
  21. while($i < $topile2){
  22. if(strlen($exp1[$i]) >= $iletop){
  23. $tytu = substr($exp1[$i], 0, $iletop);
  24. $tytul = $tytu."...";
  25. }else{
  26. $tytul = $exp1[$i];
  27. }
  28.  
  29. echo $exp0[$i]."|#|".$exp1[$i]."|#|".$exp2[$i]."<br>";
  30. $i++;
  31. }
  32. ?>


Teraz wyjaśnie o co dokaldnie chodzi.
Ja chcem zeby mi sortowało przy wyswietlaniu tak:

Kod
   22|#|text|#|audio
   12|#|asd|#|audio
   10|#|jeszcze inne|#|audio
   1|#|cos innego|#|video


dlatego urzylem rsort() i teraz mi wyswietla
zamiast tak jak ja chcem to tak:

Kod
   22|#|asd|#|audio
   12|#|cos innego|#|video
   10|#|jeszcze inne|#|audio
   1|#|text|#|audio


czyli tylko pierwsza kolumna sie sortuje a reszta pozostaje tak samo jak byla
i na tym polega moj problem jak zrobic zeby kolumna 2 i 3 terz sie zmienialy odpowiednio
czyli zeby to wygladalo tak:

Kod
   22|#|text|#|audio
   12|#|asd|#|audio
   10|#|jeszcze inne|#|audio
   1|#|cos innego|#|video



Proszę o podpowiedzenie co zrobilem źle i w czym jest problem.
Z góry dzieki


--------------------
Kliknij jeśli Ci pomogłem, podziękuj za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
webdice
post 12.07.2008, 11:35:10
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. <?php
  2. list($exp0[$x], $exp1[$x], $exp2[$x]) = explode("|#|", $liniatop[$x]);
  3. ?>


Spróbuj zmienić na:

  1. <?php
  2. list((int)$exp0[$x], $exp1[$x], $exp2[$x]) = explode("|#|", $liniatop[$x]);
  3. ?>
Go to the top of the page
+Quote Post
lolek92
post 12.07.2008, 12:16:39
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 12.07.2008

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


Niestety nie działa
Parse error: syntax error, unexpected T_INT_CAST, expecting ',' or ')' in index.php on line 15

a linia 15 to:
  1. <?
  2. list((int)$exp0[$x], $exp1[$x], $exp2[$x]) = explode("|#|", $liniatop[$x]);
  3. ?>


probowalem tez tak:
  1. <?
  2.  list((int)($exp0[$x], $exp1[$x], $exp2[$x])) = explode("|#|", $liniatop[$x]);
  3. ?>


Ten post edytował lolek92 12.07.2008, 12:20:48


--------------------
Kliknij jeśli Ci pomogłem, podziękuj za pomoc.
Go to the top of the page
+Quote Post
webdice
post 12.07.2008, 12:17:49
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Popatrz jaki kod ja Ci podałem, a jaki wkleiłeś.
Go to the top of the page
+Quote Post
lolek92
post 12.07.2008, 12:21:56
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 12.07.2008

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


No wlasni mi sie pomylilo przy pisaniu odpowiedzi bo probowalem tak jak ty mi dales i tak jak tam bylo.


--------------------
Kliknij jeśli Ci pomogłem, podziękuj za pomoc.
Go to the top of the page
+Quote Post
webdice
post 12.07.2008, 12:23:34
Post #6


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Przepraszam mój błąd. Pod:

  1. <?php
  2. for( $x = 0; $x < $counttop; $x++ ){
  3. list($exp0[$x], $exp1[$x], $exp2[$x]) = explode("|#|", $liniatop[$x]);
  4. }
  5. ?>


daj:

  1. <?php
  2. for ($x = 0; $x < $counttop; $x++)
  3. {
  4. $exp0[$x] = (int)$exp0[$x];
  5. }
  6. ?>
Go to the top of the page
+Quote Post
lolek92
post 12.07.2008, 12:24:08
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 12.07.2008

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


tak
  1. <?
  2. for( $x = 0; $x < $counttop; $x++ ){
  3. list($exp0[$x], $exp1[$x], $exp2[$x]) = explode("|#|", $liniatop[$x]);
  4. $exp0[$x] = (int)$exp0[$x];
  5. }
  6. ?>


--------------------
Kliknij jeśli Ci pomogłem, podziękuj za pomoc.
Go to the top of the page
+Quote Post
webdice
post 12.07.2008, 12:25:44
Post #8


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Tak też może być. Ogólnie chodzi o to że w pierwszej wersji elementy tablicy exp0 były stringami, a powinny być liczbami.
Go to the top of the page
+Quote Post
lolek92
post 12.07.2008, 13:26:18
Post #9





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 12.07.2008

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


dalem tak:

  1. <?
  2. $filetop = "./topszukanch.txt";
  3. $counttop = count(@file($filetop));
  4. $topile = 30;
  5. $iletop = 20;
  6. $liniatop = @file($filetop);
  7.  
  8. if($counttop<$topile){
  9. $topile2 = $counttop;
  10. }else{
  11. $topile2 = $topile;
  12. }
  13.  
  14. for( $x = 0; $x < $counttop; $x++ ){
  15. list($exp0[$x], $exp1[$x], $exp2[$x]) = explode("|#|", $liniatop[$x]);
  16. }
  17.  
  18. for ($x = 0; $x < $counttop; $x++)
  19. {
  20. $exp0[$x] = (int)$exp0[$x];
  21. }
  22.  
  23.  
  24. rsort($exp0);
  25.  
  26. $i = 0;
  27. while($i < $topile2){
  28. if(strlen($exp1[$i]) >= $iletop){
  29. $tytu = substr($exp1[$i], 0, $iletop);
  30. $tytul = $tytu."...";
  31. }else{
  32. $tytul = $exp1[$i];
  33. }
  34.  
  35. echo $exp0[$i]."|#|".$exp1[$i]."|#|".$exp2[$i]."<br>";
  36. $i++;
  37. }
  38. ?>


i dalej tak samo tylko zmienia pierwsza kolumne a reszta tak jak w pliku

plik topszukanch.txt

Kod
4|#|alchemist|#|audio
11|#|alchemist project|#|audio
4|#|alchemist project music is my extasy|#|audio
39|#|rmx|#|audio
5|#|rmx 2008|#|audio
12|#|mix 2009|#|audio
6|#|superlover 2008|#|audio
3|#|superlover mix|#|audio
6|#|superlover rmx 2008|#|audio
10|#|superlover|#|audio
5|#|kalinka rmx|#|audio
5|#|kalinka|#|audio
12|#|dj hubertus|#|audio
6|#|dj hubertus rmx|#|audio
6|#|dj rmx|#|audio
3|#|dj driver|#|audio
3|#|helly furtado|#|video
10|#|nelly furtado|#|audio
4|#|nelly furtado rmx 2008|#|audio
10|#|max|#|audio
4|#|htwoo|#|audio
9|#|H2O|#|audio
8|#|fell|#|audio
1|#|jak anioła głos|#|video
1|#|podaj mi dłoń|#|audio
2|#|feel|#|video


a kod wyswietla:

Kod
39|#|alchemist|#|audio
12|#|alchemist project|#|audio
12|#|alchemist project music is my extasy|#|audio
11|#|rmx|#|audio
10|#|rmx 2008|#|audio
10|#|mix 2009|#|audio
10|#|superlover 2008|#|audio
9|#|superlover mix|#|audio
8|#|superlover rmx 2008|#|audio
6|#|superlover|#|audio
6|#|kalinka rmx|#|audio
6|#|kalinka|#|audio
6|#|dj hubertus|#|audio
5|#|dj hubertus rmx|#|audio
5|#|dj rmx|#|audio
5|#|dj driver|#|audio
4|#|helly furtado|#|video
4|#|nelly furtado|#|audio
4|#|nelly furtado rmx 2008|#|audio
4|#|max|#|audio
3|#|htwoo|#|audio
3|#|H2O|#|audio
3|#|fell|#|audio
2|#|jak anioła głos|#|video
1|#|podaj mi dłoń|#|audio
1|#|feel|#|video


cos tu jest nietak ze sortuje tylko pierwsza kolumne a reszte postawia tak ja bylo, mi sie wydaje ze trzeba polaczyc dane z wiersza jakos zeby wszystko sortowalo, tylko ja niewiem jak

chcialem powiedziec ze jezeli zmienie
Kod
rsort($exp0);
\
na
Kod
rsort($exp1);


to mi posortuje tylko druga kolumne a pierwsza jest tak samo jak w pliku czyli wyglada to tak:

Kod
4|#|superlover rmx 2008|#|audio
11|#|superlover mix|#|audio
4|#|superlover 2008|#|audio
39|#|superlover|#|audio
5|#|rmx 2008|#|audio
12|#|rmx|#|audio
6|#|podaj mi dłoń|#|audio
3|#|nelly furtado rmx 2008|#|audio
6|#|nelly furtado|#|audio
10|#|mix 2009|#|audio
5|#|max|#|audio
5|#|kalinka rmx|#|audio
12|#|kalinka|#|audio
6|#|jak anioła głos|#|audio
6|#|htwoo|#|audio
3|#|helly furtado|#|audio
3|#|fell|#|video
10|#|feel|#|audio
4|#|dj rmx|#|audio
10|#|dj hubertus rmx|#|audio
4|#|dj hubertus|#|audio
9|#|dj driver|#|audio
8|#|alchemist project music is my extasy|#|audio
1|#|alchemist project|#|video
1|#|alchemist|#|audio
2|#|H2O|#|video



Wie ktoś jak to zrobić?? Jak wiesz to napisz bo naprawde dlugo nad tym myślałem i duzo szukalem.


--------------------
Kliknij jeśli Ci pomogłem, podziękuj za pomoc.
Go to the top of the page
+Quote Post
webdice
post 12.07.2008, 13:38:24
Post #10


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Spróbuj:

  1. <?php
  2.  
  3. $file = file ('./dane.txt');
  4. $count = count ($file);
  5.  
  6. for ($i = 0; $i < $count; $i++)
  7. {
  8. $array[$i] = explode ('|#|', $file[$i]);
  9. }
  10.  
  11. rsort ($array);
  12.  
  13. for ($i = 0; $i < $count; $i++)
  14. {
  15. print $array[$i][0] . ' - ' . $array[$i][1] . ' - ' . $array[$i][2] . '<br />';
  16. }
  17.  
  18. ?>
Go to the top of the page
+Quote Post
lolek92
post 12.07.2008, 14:44:13
Post #11





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 12.07.2008

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


ok dzieki działa poprawnie .
dalem pomogl

narka


--------------------
Kliknij jeśli Ci pomogłem, podziękuj za pomoc.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:57