Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie i wyświetlanie wyników
Forum PHP.pl > Forum > PHP
Rafael6666
Mam pewien problem dotyczący sortowania w php, a dokładniej wyświetlania jego wyników. Plik dane.txt ma zapisane dane w następujący sposób:

Kod
123|a|z|
456|r|f|
1|p|r|


Chcę otrzymać coś takiego żeby linie były wyświetlone w taki sposób, jak sortowane zostają liczby. Czyli ma powstać coś takiego:

Kod
456 r f
123 a z
1 p r


Napisałem skrypt, który wyświetla liczbę i tylko jeden wyraz:

Kod
<?php
$fileopen = "dane.txt";
$file = file($fileopen);
foreach($file as $line) {
$a=explode("|", $line);
$liczba[$a[1]]=$a[0];
}
arsort($liczba, SORT_NUMERIC);
foreach ($liczba as $key => $value) {
echo $key." ".$value."<br>";
}
?>


Jak otrzymać, żeby wyświetlał liczbę i kilka wyrazów?
Pozdrawiam i z góry dziękuję za pomoc smile.gif ...
abc667
  1. <?php
  2. $fileopen = "dane.txt";
  3. $file = file($fileopen);
  4. foreach($file as $line) {
  5. $a=explode("|", $line);
  6. $tmp = array_shift($a); 
  7. $liczba[$tmp]= $a;
  8. }
  9. krsort($liczba);
  10. foreach ($liczba as $key => $avalue) {
  11. echo $key.' ';
  12. foreach($avalue as $val) {
  13. echo $val.' ';
  14. }
  15. echo '<br />';
  16. }
  17. ?>

np.
ale wiadomo że każdy zrobi to inaczej
Rafael6666
Działa dobrze, ale jest jeszcze jeden problem. Muszę mieć możliwość wstawienia każdego wyrazu w jakie chcę miejsce np.

Mam plik dane.txt w którym mam zapisane:

Kod
256|a|b|c|
123|x|y|z|
1000|d|e|f|


Pętla musi mi wygenerować coś takiego po sortowaniu np.

Kod
Tytuł: d
Opis: e
Dodano: f

Tytuł: a
Opis: b
Dodano: c

Tytuł: x
Opis: y
Dodano: z


Jak coś takiego można osiągnąć smile.gif ?
abc667
  1. <?php
  2. $fileopen = 'dane.txt';
  3. $file = file($fileopen);
  4.  
  5. $tt = array('Tytuł', 'Opis', 'Dodano');
  6.  
  7. foreach($file as $line) {
  8. $a=explode('|', $line);
  9. $tmp = array_shift($a); 
  10. $liczba[$tmp]= $a;
  11. }
  12. krsort($liczba);
  13. foreach ($liczba as $key => $avalue) {
  14. for($i=0;$i<count($tt);$i++) {
  15. echo $tt[$i].': '.$avalue[$i].'<br />';
  16. }
  17. echo '<br />';
  18. }
  19. ?>
Rafael6666
O fajnie... Działa jak powinno smile.gif . Dzięki. Ale jeszcze jedno. Jak wyświetlić pierwsze np. 10 wyników sortowania?
abc667
  1. <?php
  2. $fileopen = 'dane.txt';
  3. $file = file($fileopen);
  4.  
  5. $tt = array('Tytuł', 'Opis', 'Dodano');
  6.  
  7. foreach($file as $line) {
  8. $a=explode('|', $line);
  9. $tmp = array_shift($a); 
  10. $liczba[$tmp]= $a;
  11. }
  12. krsort($liczba);
  13. for ($j=0;$j<10;$j++) {
  14. for($i=0;$i<count($tt);$i++) {
  15. echo $tt[$i].': '.$liczba[$j][$i].'<br />';
  16. }
  17. echo '<br />';
  18. }
  19. ?>

ale na to już mogłeś sam wpaść smile.gif
Rafael6666
Szczerze mówiąc to pętla foreach to moja najsłabsza strona w php. Nietsty ale tak jest sad.gif ... Muszę się podszkolić tongue.gif .

A co do tego skryptu to zawiera jakiś błąd. Wyświetla się tylko jedna seria wyrazów... Sam sprawdź smile.gif ...
abc667
sorki mój błąd

  1. <?php
  2. $fileopen = 'dane.txt';
  3. $file = file($fileopen);
  4.  
  5. $tt = array('Tytuł', 'Opis', 'Dodano');
  6.  
  7. foreach($file as $line) {
  8. $a=explode('|', $line);
  9. $tmp = array_shift($a); 
  10. $liczba[$tmp]= $a;
  11. }
  12. krsort($liczba);
  13. $licznik=1;
  14. foreach ($liczba as $key => $avalue) {
  15. if($licznik > 10) break;
  16. for($i=0;$i<count($tt);$i++) {
  17. echo $tt[$i].': '.$avalue[$i].'<br />';
  18. }
  19. echo '<br />';
  20. $licznik++;
  21. }
  22. ?>
Rafael6666
A czy można jakoś łatwo osiągnąć wyświetlenie np. od 10 do 20 wyniku? Chodzi mi o to, żeby nie używać funkcji continue... Pozdrawiam smile.gif ...
abc667
  1. <?php
  2. $start = 0;
  3. $limit = 10;
  4.  
  5. $fileopen = 'dane.txt';
  6. $file = file($fileopen);
  7.  
  8. $tt = array('Tytuł', 'Opis', 'Dodano');
  9.  
  10. foreach($file as $line) {
  11. $a=explode('|', $line);
  12. $tmp = array_shift($a); 
  13. $liczba[$tmp]= $a;
  14. }
  15. krsort($liczba);
  16. $licznik=1;
  17. $z = 0;
  18. foreach ($liczba as $key => $avalue) {
  19. if($z < $start) {
  20. $z++;
  21. continue;
  22. }
  23. $z++;
  24. if($z > ($start + $limit)) break;
  25.  
  26. for($i=0;$i<count($tt);$i++) {
  27. echo $tt[$i].': '.$avalue[$i].'<br />';
  28. }
  29. echo '<br />';
  30. $licznik++;
  31. }
  32. ?>


ale bez continue raczej by było trudno
aby wyświetlić od 10 do 20
  1. <?php
  2. $start = 10;
  3. $limit = 10;
  4. ?>
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.