Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] od ostatniego do pierwszego wiersza
Forum PHP.pl > Forum > Przedszkole
@rtur
Witam

Moja zmienna $text wygląda w tej chwili tak:

  1. $text = 'Ala ma kota
  2. Agata ma ołówek
  3. Adam ma kredki
  4. Ola ma rower
  5. Kuba ma pianino';


jak zmienić te zmienną aby wygląda tak:

  1. $textodwrotnie = 'Kuba ma pianino
  2. Ola ma rower
  3. Adam ma kredki
  4. Agata ma ołówek
  5. Ala ma kota';


chodzi mi o to aby odwrócić kolejność tego tekstu, aby był on czytany od ostatniego do pierwszego wiersza.
viking
Wrzucić po linii do tablicy, tablicę odwrócić, zapisać ponownie do stringa.
@rtur
zrobiłem tylko ie wiem teraz jak wyświetlić całość, po jednym elemencie mi się udaje

  1. <?php
  2. $text = 'Ala ma kota
  3. Agata ma ołówek
  4. Adam ma kredki
  5. Ola ma rower
  6. Kuba ma pianino';
  7. $text2 = explode("\n", $text); // tworzymy tablicę z każdego wiersza w zmiennej $text
  8. $text3 = array_reverse($text2); // odwracamy tablicę $text2
  9. echo $text2[0].'<br />'; // 1 element tablicy $text2 - Ala ma kota
  10. echo $text3[0].'<br />'; // 1 element tablicy $text3 - Kuba ma pianino
  11. echo $text;
  12. ?>
pehaperowiec
masz 2 rozwiązania
1) Albo w petli wypisywać zawartośc tablicy
2) Zamienić tą tablice na stringa za pomocą implode()
Greg0
sory że gotowiec ale chce ci pokazać że to mozna zrobić na jednej zmiennej.
  1. <?php
  2.  
  3. $text = 'Ala ma kota
  4.  
  5. Agata ma ołówek
  6.  
  7. Adam ma kredki
  8.  
  9. Ola ma rower
  10.  
  11. Kuba ma pianino';
  12.  
  13. $text = explode("\n", $text); // tworzymy tablicę z każdego wiersza w zmiennej $text
  14.  
  15. $text = array_reverse($text); // odwracamy tablicę $text2
  16.  
  17. echo implode("\n", $text);
  18.  
  19. ?>
@rtur
okej dziękuję za podpowiedzi, zrobiłem to tak:
  1. $text = 'Ala ma kota
  2. Agata ma ołówek
  3. Adam ma kredki
  4. Ola ma rower
  5. Kuba ma pianino';
  6. $text2 = explode("\n", $text);
  7. $text2 = array_reverse($text2);
  8. echo $text;
  9. $text2 = implode("\n", $text2);
  10. echo '<br />'.$text2;

a jak teraz po co 8 \n dać znacznik<br />
Pawel_W
pętla for po array_reverse + modulo? smile.gif
@rtur
Cytat(Pawel_W @ 5.09.2012, 09:51:23 ) *
pętla for po array_reverse + modulo? smile.gif


czyli zamiast implode() użyć pętli for z modulo?
Jinbe
Cytat(Pawel_W @ 5.09.2012, 10:51:23 ) *
pętla for po array_reverse + modulo? smile.gif


Nie lepiej pomiędzy array_reverse a implode zrobić pętlę z krokiem 8 i na końcu "co ósmego" elementu tabeli dopisywać znacznik?
@rtur
zrobiłem tak:

  1. $oryginalnytext = 'Ala ma kota
  2. Agata ma ołówek
  3. Adam ma kredki
  4. Ola ma rower
  5. Kuba ma pianino';
  6. $textodwrotnie = explode("\n",$oryginalnytext);
  7. $textodwrotnie = array_reverse($textodwrotnie);
  8. for($i=0; $i<=count($textodwrotnie); $i++) {
  9. if($i%2==0) {
  10. echo $textodwrotnie[$i].'<br />'."\n";
  11. }
  12. else {
  13. echo $textodwrotnie[$i]."\n";
  14. }
  15. }

co daje taki kod:
  1. Kuba ma pianino<br />
  2. Ola ma rower
  3. Adam ma kredki<br />
  4. Agata ma ołówek
  5. Ala ma kota<br />

a ja chciałbym otrzymać taki kod
  1. Kuba ma pianino
  2. Ola ma rower<br />
  3. Adam ma kredki
  4. Agata ma ołówek<br />
  5. Ala ma kota

gdzie popełniam błąd?
Jinbe
Cytat(@rtur @ 5.09.2012, 13:02:56 ) *
  1. $oryginalnytext = 'Ala ma kota
  2. for($i=0; $i<=count($textodwrotnie); $i++) {
  3. if($i%2==0) {
  4. echo $textodwrotnie[$i].'<br />'."\n";
  5. }
  6. else {
  7. echo $textodwrotnie[$i]."\n";
  8. }
  9. }

gdzie popełniam błąd?


Przyjrzyj się powyższej pętli i pomyśl. Elementy tablicy są numerowane od zera. Znacznik <br /> dodajesz, kiedy indeks $i wartość parzystą (a więc zaczynasz od wiersza pierwszego mającego indeks 0). Skoro chcesz, żeby było na odwrót, to... smile.gif
Pawel_W
Cytat(Jinbe @ 5.09.2012, 12:43:18 ) *
Nie lepiej pomiędzy array_reverse a implode zrobić pętlę z krokiem 8 i na końcu "co ósmego" elementu tabeli dopisywać znacznik?

zastanów się czy nie napisałem tego samego wink.gif
Jinbe
Cytat(Pawel_W @ 5.09.2012, 14:58:05 ) *
zastanów się czy nie napisałem tego samego wink.gif

Moim zdaniem nie do końca wink.gif Modulo sugeruje, że chciałeś robić pętlę po wszystkich elementach i sprawdzać, czy w którymś momencie indeks jest podzielny przez 8. Oznacza to n przebiegów pętli i sprawdzanie warunku modulo. Ja zasugerowałem takie ustawienie for, żeby od razu zwiększało licznik o 8, więc wtedy mamy (n/8) przebiegów i bez sprawdzania dodatkowego warunku. Oczywiście przy takich danych nie zwiększy to znacząco wydajności, ale rozwiązanie wydaje mi się bardziej eleganckie smile.gif
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.