christdi Skrevet 25. mai 2004 Del Skrevet 25. mai 2004 Hei. I koden nedenfor prøver jeg å skrive ut Dog og Cat med bruk av preg_match, men hele array'n blir skrevet ut. Hva gjør jeg galt her ? <? $find = array("Dog","Horse","Cat","Bird"); for ($i=0; $i<count($find); $i++) { if(preg_match("/(Dog|Cat)/i",$match)) { print $match[$i]." "; } else { print $find[$i]." "; }} ?> Lenke til kommentar
RipZ- Skrevet 26. mai 2004 Del Skrevet 26. mai 2004 Hmm, vanskelig å si hva du gjør feil siden du ikke gidder å forklare hva du prøver på. I hvilken situasjon skal du bruke dette scriptet i? For å skrive ut "Cat og Dog", skriver man jo bare echo "Cat og Dog"; , men så er sikkert ikke dette du prøver på heller. Kort fortalt har du skrevet en kode som kjører en if-test på en preg_match som peker mot en variabel som ikke finnes. Med andre ord vil den feile hver gang og gå for din else, som printer ut elementene i arrayen. Lenke til kommentar
Torbjørn Skrevet 26. mai 2004 Del Skrevet 26. mai 2004 hm... ser ikke ut som du henter ut elementene fra $find noe sted? du definerer lista, men hvordan skal preg_match vite at du ønsker å bruke $find å matche mot? Lenke til kommentar
christdi Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 Det jeg prøver å gjøre er å trekke ut innholdet av arrayen som matcher søkekriteriene Dog og Cat. Hvis preg finner Dog og Cat skal kun de to skrives ut. Hvis preg ikke finner Dog og Cat skal ingen ting skrives ut. Lenke til kommentar
Torbjørn Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 jeg skjønner det, men se på preg_match koden, den bruker jo ikke $find noe sted, hvordan skal den vite at det er elementene i $find den skal matche mot? det blir som å si: $addresse = "[email protected]"; mail("hei her kommer det en email, hilsen meg"); ... og forvente at mailkommandoen skal "vite" at du ønsker å sende til $addresse, selvom du ikke bruker $addresse i mailkommandoen. Lenke til kommentar
Nervetattoo Skrevet 27. mai 2004 Del Skrevet 27. mai 2004 <? $find = array("Dog","Horse","Cat","Bird"); for ($i=0; $i<count($find); $i++) { if(preg_match("/(Dog|Cat)/i", $find, $match)) { print $match[$i]." "; } else { print $find[$i]." "; }} ?> Fikset den feilen som er kommentert av andre. preg_match("/Dog|Cat/i", $match) - Denne vil søke gjennom variabelen match, som ikke er definert. preg_match("/Dog|Cat/i", $find, $match) - Denne vil søke gjennom $find og lagre i $match. Men etter å ha lest gjennom koden din selv så har du noen andre feil. For det første så skriver du ut $match[$i]. Siden du gjør dette søket for hver gang må du skrive ut $match[0] for å få ønsket resultat. En korrigert kode som jeg tror har det resultatet du ønsker å oppnå: <? $find = array("Dog","Horse","Cat","Bird"); for ($i=0; $i<count($find); $i++) { if(preg_match("/(Dog|Cat)/i", $find[$i], $match)) { print $match[0]." "; } else { print $find[$i]." "; }} ?> Men du kan med fordel forandre dette ved å legge preg_match utenfor loopen. Egentlig kan du forandre alt for å gjøre det kjappere enklere og smartere. Lenke til kommentar
christdi Skrevet 27. mai 2004 Forfatter Del Skrevet 27. mai 2004 Nå forstår jeg. Takk til Findus og Torbjørn. Jeg tenkte ikke på å fortelle preg_match hva det skal søkes i. Det er jo kanskje en fordel... Dette burde jeg insett. Shame on me... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå