Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][PHP]Jak zamienić w ciągu znaków co drugie wystąpienie podciągu ?
jolam
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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
Go to the top of the page
+Quote Post
jolam
post
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
piotrooo89
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




jQuery:
http://porady-it.pl/default/solutions/show...j_czytelna.html
Go to the top of the page
+Quote Post
vokiel
post
Post #5





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Jeśli język angielski nie jest przeszkodą to możesz zerknąć tutaj: jQuery colorize table
Go to the top of the page
+Quote Post
jolam
post
Post #6





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Daiquiri
post
Post #7





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Go to the top of the page
+Quote Post
vokiel
post
Post #8





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


  1. $klasa = ($i%2 == 0)? 'klasa_1' : 'klasa_2';
  2. echo '<tr class="'.$klasa.'"><td></td></tr>';
Go to the top of the page
+Quote Post
jolam
post
Post #9





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
piotrooo89
post
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




kurcze zrobienie tego po stronie klienta (jQuery) jest dla Ciebie wyjściem idealnym.
Go to the top of the page
+Quote Post
Daiquiri
post
Post #11





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.


Ten post edytował Daiquiri 20.11.2009, 11:36:38
Go to the top of the page
+Quote Post
jolam
post
Post #12





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
vokiel
post
Post #13





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Daiquiri
post
Post #14





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 07:08