Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jeśli * to wyświetli |
Forum PHP.pl > Forum > Przedszkole
Booster
Witam, posiadam taki kod (jak niżej) potrzebuję dodać do niego jeszcze że jeśli będą kategorie z tej drugiej pętli to między nimi nie będzie przecinka tylko |

  1. <?php
  2. $categories = explode(', ',$categories);
  3. $i=1;
  4. echo '<div class="categories-div">';
  5. foreach($categories as $cat) {
  6. if(strpos($cat, 'KRAJ') >0 || strpos($cat , 'ŚWIAT') > 0 || strpos($cat , 'GOSPODARKA') > 0 || strpos($cat , 'SPOŁECZEŃSTWO') > 0 || strpos($cat , 'KULTURA') > 0 || strpos($cat , 'HISTORIA') > 0 || strpos($cat , 'FILOZOFIA') > 0 )
  7. {if($i>1)
  8. echo ' , ';
  9. echo $cat;
  10. $i++;
  11. }
  12. else
  13. {
  14.  
  15. }
  16. }
  17.  
  18. ?>
  19. ---->>> TUTAJ znaczek " | " <<<-------
  20. <?php
  21.  
  22. foreach ($categories as $cat) {
  23. if(strpos($cat , 'ANALIZA') > 0 || strpos($cat , 'ESEJ') > 0 || strpos($cat , 'ARTYKUŁ') > 0 || strpos($cat , 'FELIETON') > 0 || strpos($cat , 'POLEMIKA') > 0 || strpos($cat , 'RECENZJA') > 0 || strpos($cat , 'WYWIAD') > 0)
  24. {if($i>1)
  25. echo ' , ';
  26. echo $cat;
  27. $i++;
  28. }
  29. else {}
  30. }
  31. ?>
Turson
  1. echo ' , ';

na
  1. echo ' | ';


questionmark.gif
-Booster-
Niestety nie chodzi o to, ponieważ gdy to zamienię w drugiej pętli będą zamiast przecinków -> | , a ja potrzebuję tu i tu przecinków ale jeśli w drugiej pętli coś znajdzie to żeby wyświetlało przed nią ten znak | czyli

A, B, C | D, E, F
bostaf
Po części sam już sobie odpowiedziałeś na to pytanie:
Cytat(Booster @ 19.12.2013, 09:44:10 ) *
jeśli będą kategorie z tej drugiej pętli

Problem jest taki, że chcemy zrobić coś (wyświetlić znak) pod warunkiem zajścia zdarzenia, które nastąpi w przyszłości (druga pętla foreach). Tego nie da się zrobić w locie, bo nie jesteśmy w stanie przewidzieć wyniku zdarzenia, które jeszcze nie nastąpiło. Skoro nie w locie, to trzeba najpierw sprawdzić oba warunki, wstępnie przygotować dane i dopiero wyświetlić wynik.
Wyrzuć z obu pętli instrukcje drukowania (echo) i zastąp je przypisaniem do innej zmiennej, np. $kategorie_1 i $kategorie_2. A konkretnie, zamiast
  1. echo ' , ';
  2. echo $cat;

daj
  1. $kategorie_1 .= ' , ';
  2. $kategorie_1 .= $cat;

W drugiej pętli analogicznie z $kategorie_2. No i wcześniej oczywiście zainicjuj te nowe zmienne jako puste łańcuchy ($kategorie_1 = $kategorie_2 = '').
Teraz, po wykonaniu obu pętli sprawdź, czy obie są niepuste, i jeśli tak to wyświetl je wstawiając pomiędzy znak "|":
  1. echo $kategorie_1;
  2. if ($kategorie_1 != '' AND $kategorie_2 != '') echo ' | ';
  3. // albo if ( ! empty($kategorie_1) AND ! empty($kategorie_2)) echo ' | ';
  4. echo $kategorie_2;


Jeszcze taka sugestia: zamiast tych długich instrukcji warunkowych sprawdzających obecność danych kategorii spróbuj wykorzystać funkcję in_array, definiując wcześniej dwie tablice z grupami kategorii. Wtedy całą listę warunków będziesz mógł zastąpić prostym:
  1. $pierwsza_grupa_kategorii = array('KRAJ', 'ŚWIAT', 'GOSPODARKA', 'SPOŁECZEŃSTWO', 'KULTURA', 'HISTORIA', 'FILOZOFIA');
  2. // ...
  3. foreach($categories as $cat) {
  4. if (in_array($cat, $pierwsza_grupa_kategorii) {
  5. // ...
  6. }
  7. }

... a grupami kategorii będziesz mógł elastycznie zarządzać z poziomu tych dodatkowych tablic, a nawet elegancko te tablice definiować z bazy danych.
mar1aczi
W linię 16 wstaw:
  1. $tmp = $i;

i dalej w linię 25:
  1. if($i == $tmp) echo " | ";
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.