Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Jak zamienić w ciągu znaków co drugie wystąpienie podciągu ?
Forum PHP.pl > Forum > Przedszkole
jolam
Mam taki problem, że zrobiłam obie tabelki w Markdown i chciałabym teraz zamienić co drugi tag <tr> na <tr class="dwa">. Przy czym raz chciałabym zamieniać od pierwszego wiersza a raz od drugiego (zamieniać na: <tr class="dwa"> i odpowiednio <tr class="jeden">). Wcześniej jak miałam tabelki html w plikach to bez problemu odczytywałam je komendą file i zamineiałm w co drugim wierszu. A teraz mam całą tabelkę w łańcuch. Jak to zamienić? Przy czym chciałabym najpierw poznać najprostszy sposób bez wyrażeń regularnych.
Bardzo proszę o pomoc.

pozdrawiam serdecznie Jola
phpion
Zakładam, że chcesz zrobić wiersze kolorowane na przemian różnymi kolorami. Nie prościej więc zrobić w CSS?
http://www.w3.org/Style/Examples/007/evenodd
i to samo po polsku (ale nie sprawdzałem "jakości" tłumaczenia):
http://www.tlumaczenia-angielski.info/w3c/css/evenodd.html
jolam
Wolałabym użyć czegoś co będzie działać w większości przeglądarek. Dlatego chce pozamieniać co drugie znaczniki <tr> na takie które mają odpowiednie klasy - klasa parzysta i nieparzysta.

Powiesz mi jak to zrobić? Bardzo mi na tym zależy.


pozdrawiam serdecznie Jola
piotrooo89
jQuery:
http://porady-it.pl/default/solutions/show...j_czytelna.html
vokiel
Jeśli język angielski nie jest przeszkodą to możesz zerknąć tutaj: jQuery colorize table
jolam
Ale mi chodzi o rozwiązanie w PHP. To znaczy mam ciąg znaków i chcę w tym ciągu co drugi podciąg <tr> zamienić ma <tr class="class1">. Podpowiecie jak to zrobić?

pozdrawiam serdecznie Jola
Daiquiri
Jeżeli wyświetlasz to za pomocą while/for czy czegośtam postaw po prostu warunek. Np. $i = 2, a potem:
  1. if ($i%2 == 0) {
  2. // tu wyświetlasz parzysto
  3. } else {
  4. // a tu nieparzysto
  5. }
  6. ++$i;


Mam nadzieje, że dobrze Cię rozumiem.
vokiel
  1. $klasa = ($i%2 == 0)? 'klasa_1' : 'klasa_2';
  2. echo '<tr class="'.$klasa.'"><td></td></tr>';
jolam
Nie do końca rozumiem. Wiem, że mam zamieniać co drugie wystąpienie. Ale na wejściu mam tylko tekst w zmiennej $string. I co dalej pętla do od i=0 do i=ilosc_tr i potem to rozróżnienie na parzyste i nieparzyste i. Ale te zamiany poprzez str_replace będą dotyczyć całej zmiennej $string a to chyba niepotrzebne? JEstem już blisko zrozumienia, ale jednak nie do końca - czegoś brakuje.

pozdrawiam Jola
piotrooo89
kurcze zrobienie tego po stronie klienta (jQuery) jest dla Ciebie wyjściem idealnym.
Daiquiri
Nie wiem jak wygląda Twój ciąg, ale musisz go podzielić, korzystając np. z explode. W samym manualu właśnie jest przykład:
  1. <?php
  2. $pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
  3. $pieces = explode(" ", $pizza);
  4. echo $pieces[0];
  5. echo $pieces[1];
  6. // itd.
  7. ?>
Jeżeli skorzystasz z for do wyświetlenia parzystych i nieparzystych to po prostu robisz echo, np. pieces[$j] gdzie $j wzrasta o jeden z każdym wykonaniem while/for czy czego tam używasz.

Możesz nie zamieniać wszystkich danych w całym ciągu tylko wyświetlać go częściami. Jeżeli Twój string jest podzielony na $tablica[], a każda pozycja z $tablica[] to pojedyncza komórka, to musisz zrobić odgórny warunek, który zapewni Ci "przejście" po każdym elemencie tablicy np. $tablica[0], $tablica[1] poprzez np. licznik $i, który będzie się co rundę zwiększał. Potem zanim wyświetlisz te dane sprawdzasz czy licznik jest parzysty czy nie. Jeżeli parzysty to wyświetlasz go jako jaśniejszy wiersz, a jak nieparzysty to jako ciemniejszy.

Nie wiem dlaczego nie chcesz skorzystać z innych rozwiązań, nie wiem jak wygląda Twój ciąg i jaką wiedzą dysponujesz. Dlatego zastrzegam, że może to nie być full optymalne rozwiązanie dla Ciebie.
jolam
ale jak miałabym użyć funkcji explode? Co miałoby być separatorem, znaki: <tr>? Właśnie tego nie rozumiem Jak podzielić, żeby w tablicy jako jej elementy mieć całe wiersze?

pozdrawiam Jola
vokiel
Pokaż Jolu na jakim kodzie operujesz.

Czy kod do wyświetlenia generujesz z tablicy (wyniki z bazy danych), czy z ciągu tekstowego (pobrany np z innej strony).

Chcesz to obrobić przed wyświetleniem na stronie (w PHP), czy już po utworzeniu kodu html w przeglądarce (JavaScript).

Btw
W profilu nie masz zaznaczonej płci, miło, że się podpisałaś imieniem smile.gif
Daiquiri
Tak jak wspomniał Vokiel, uchyl rąbka tajemnicy i wklej kod.

Strzelając na ślepo: Twoim dzielnikiem w explode może być np. <tr>. Jeżeli Twoja zmienna to ciąg typu $zmienna = "<tr><td>cośtam</td><td>cośtam></tr><tr><td>cośtam</td><td>cośtam></tr><tr><td>cośtam</td><td>cośtam></tr>"; Wtedy:
  1. <?php
  2. $tr = explode("<tr>", $zmienna);
  3. $j = 2; //pomocnicza zmienna
  4. echo "<table>"; // początek tablicy
  5.  
  6. for($i=0; $i < count($tr); ++$i) { // Pierwsza pętla która "przeleci" wszystkie wyniki
  7. if ($j%2 ==0) { // tu sprawdzasz czy liczba jest parzysta
  8. echo "<tr class='parzysta'>" . $tr[$i]; //bez zamknięcia </tr> bo $tr[0] = "<td>cośtam</td><td>cośtam></tr>";
  9. } else { //wyświetla cześć nieparzystą
  10. echo "<tr class='nieparzysta'>" . $tr[$i];
  11. }
  12. $j=$j+1; // żeby liczby były na przemian parzyste i nieparzyste
  13. }
  14. echo "</table>";

Pisane "z ręki" bez sprawdzania, więc mogą pojawić się błędy. Analogicznie możesz to zrobić dla innej części tabeli.
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.