Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z sortowaniem
Forum PHP.pl > Forum > Przedszkole
lolek92
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
webdice
  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. ?>
lolek92
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. ?>
webdice
Popatrz jaki kod ja Ci podałem, a jaki wkleiłeś.
lolek92
No wlasni mi sie pomylilo przy pisaniu odpowiedzi bo probowalem tak jak ty mi dales i tak jak tam bylo.
webdice
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. ?>
lolek92
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. ?>
webdice
Tak też może być. Ogólnie chodzi o to że w pierwszej wersji elementy tablicy exp0 były stringami, a powinny być liczbami.
lolek92
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.
webdice
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. ?>
lolek92
ok dzieki działa poprawnie .
dalem pomogl

narka
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.