[php] Nie działa pętla while

0

Cześć, zaraz się zabiję, bo siędzę już chyba 3 godzinę nad totalnie błahym problemem:

while(strpos($str, '[link:')!==false);
  {
    //pobieram adres
    $pos = strpos($str, '[link:')+6;
    $adres = substr($str, $pos, strpos($str, ']')-$pos);
    $str = str_replace('[link:'.$adres.']', '<a href="'.$adres.'.php?'.SID.'">', $str);
    $str = str_replace('[/link]', '</a>', $str);
  }

Czemu to nie działa??

To jest tak.
Przekazuję stringa, w którym mogą być ciągi: [link:blabla]blablablablabla[/link]
I teraz ma tego stringa tak zamienić, żeby
[link:blabla] był
[/link] był

Tymczasem jedyne co się dzieje, to się zapętla.
Pętli muszę użyć, bo w stringu może być więcej takich par niż jedna.

Jestem pewny, że funkcja strpos zwraca mi false, bo sprawdzałem
(if(strpos....===false) echo "false";)

Pomóżcie, bo zaraz się zabiję... A miałem rzucać palenie...

PS. Wesołych

0

Jestem pewny, że funkcja strpos zwraca mi false, bo sprawdzałem

no to w czym problem ? :/

bardziej elegancko by jednak było jakbyś użył wyrażeń regularnych

a te swoje instrukcje wykonujesz zawsze ale tylko raz, ten średnik na końcu pierwszej linijki jednak wiele zmienia !

nie programuj w święta, bug się rodzi

0

Prościej tak:

function zwroc_linka($text){$text = preg_replace("/\[link:(.*?)\](.*?)\[\/link\]/", '<a href="$1">$2</a>', $text); return $text;};


//UŻYWANIE FUNKCJI
echo zwroc_linka('[link:http://link.com]TO JEST LINK[/link]');

a twój kod powinien wyglądać tak:

while(strpos($str, '[link:')!==false)
  {
    $pos = strpos($str, '[link:')+6;
    $adres = substr($str, $pos, strpos($str, ']')-$pos);
    $str = str_replace('[link:'.$adres.']', '<a href="'.$adres.'.php?'.SID.'">', $str);
    $str = str_replace('[/link]', '</a>', $str);
  }

o jeden znaczek ; za dużo...

0

o jeden znaczek ; za dużo...

Oh shit, nie wiem, jak on się tam znalazł...

Na moim nagrobku napiszą: "Zabity przez średnik"

0
voldenet napisał(a)
function zwroc_linka($text){$text = preg_replace("/\[link:(.*?)\](.*?)\[\/link\]/", '<a href="$1">$2</a>', $text); return $text;};

Nie zrozumiem chyba tej manii nadużywania zmiennych. Nie prościej było powyżej zrobić:

function zwroc_linka() { return preg_replace([...]); }

?

Spora ilość "obcego" kodu z jakim mam do czynienia robi tego typu nadużycia. Może mi ktoś wyjaśnić skąd to się bierze?

Tak samo zapis:

function a() { return is_array() ? 1 : 0; }

(pomijam tutaj bezsensowność aliasowania wbudowanej funkcji, chodzi mi o ideę).

0
mysz napisał(a)

...

nie wiem, ale np zapytania sql zawsze daję do jdnej zmiennej, a potem je wywołuje, zwiększa się zdecydowanie czytelność kodu, za to np powyższy przykład zdecydowanie zaciemnia działanie

ja o ile jeszcze mogę zrozumieć:

cos = !!object;
czy
cos = object ? true : false;

to nie rozumiem
cos = bool ? true : false;

...

1 użytkowników online, w tym zalogowanych: 0, gości: 1