Avatar billede connorz Nybegynder
18. maj 2003 - 13:25 Der er 14 kommentarer og
1 løsning

strpos returnerer "falsk"

Jeg har følgende:

while($start=strpos($haystack,$needle)
{
...kode...
}

Mit problem er nu, at hvis $needle står først i $haystack, vil strpos returnerer 0, som PHP evaluerer til noget falsk, og derefter hoppes ud af løkken - men det er jo ikke meningen! Hvordan kan jeg løse problemet nemmest?
Den naive metode er vel, at sætte et tegn ind i $haystack inden og så fjerne det igen bagefter, men det er da ikke særlig elegant!
Avatar billede fangel Nybegynder
18. maj 2003 - 13:37 #1
hmm... det er ikke _SÅ_ nemt... MEN...

<?php
$t1 = 0;
$t2 = false;
if($t1 == false) echo "t1 er falsk...<br>";

if($t1 === false) echo "t1 er stadig falsk...<br>";
else echo "t1 er alligevel ikke falsk...<br>";

if($t2 === false) echo "t2 er i hvert fald falsk...";
?>

dette script give dig et hint...

Morten
Avatar billede connorz Nybegynder
18. maj 2003 - 13:42 #2
ok resultat:
t1 er falsk...
t1 er alligevel ikke falsk...
t2 er i hvert fald falsk...
(så kan andre også få glæde af det ;))
Avatar billede connorz Nybegynder
18. maj 2003 - 13:43 #3
så jeg skal altså bruge:
while(($start=strpos($haystack,$needle))!==false)
{
...kode...
}

???
Avatar billede connorz Nybegynder
18. maj 2003 - 13:43 #4
det er faktisk:
while(($start=strpos($haystack,$needle,$start+1))!==false)
{
...kode...
}
Avatar billede fangel Nybegynder
18. maj 2003 - 13:44 #5
en forklaring...

== tjekker om ting er ens, lige meget hvilken type variabler det er...

=== tjekker om ting er ens, både indhold og type... og 0 og false er ikke samme type... ;)

SÅ, du skal nok lege lidt for at få det til at virke... men det er muligt...

Morten
Avatar billede connorz Nybegynder
18. maj 2003 - 13:46 #6
hmm... det virker ikke!
nogle gode forslag?
Avatar billede fangel Nybegynder
18. maj 2003 - 13:46 #7
for($start=strpos($haystack,$needle); $start === false; $start=strpos($haystack,$needle))
{
  ... kode ...
}

men jeg ved ikke om dit forslag vil virke med !===

Morten
Avatar billede fangel Nybegynder
18. maj 2003 - 13:47 #8
hov... skulle så være med

for($start=strpos($haystack,$needle,$start+1); $start !=== false; $start=strpos($haystack,$needle,$start+1))
{
  ... kode ...
}
Avatar billede fangel Nybegynder
18. maj 2003 - 13:48 #9
hov igen... slet ",$start+1" fra den første
Avatar billede fangel Nybegynder
18. maj 2003 - 13:49 #10
altså:

for($start=strpos($haystack,$needle); $start !=== false; start=strpos($haystack,$needle,$start+1))
{
  ... kode ...
}
Avatar billede connorz Nybegynder
18. maj 2003 - 13:49 #11
php kender i hvert fald ikke !=== men den kender godt !==, så mon ikkke det er den ;)
det virker godt nok stadig ikke, men I keep trying :D
Avatar billede fangel Nybegynder
18. maj 2003 - 13:53 #12
nå... så skal der lidt alternativ kode til... ikke så sej kode, men jeg gidder ikke lige finde på noget smartere...

$start = strpos($heystack,$needle);
while(1==1) // får den til at køre uendeligt
{
  if($start === false) break; // stopper den når start er falsk...

  ... kode ...

  $start=strpos($haystack,$needle,$start+1);
}

Morten
Avatar billede connorz Nybegynder
18. maj 2003 - 13:58 #13
fik det lige til at virke... den kunne bruge !==
så while-løkken blev:

while(($start=strpos($haystack,$needle,$start+1))!==false)
{
...kode...
}
men det krævede jo lige, at $start=-1, når man startede ;)
Avatar billede connorz Nybegynder
18. maj 2003 - 13:58 #14
tak for hjælpen :D
Avatar billede fangel Nybegynder
18. maj 2003 - 14:01 #15
så lidt... ;) og tak for point ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester