Gå til innhold

Anbefalte innlegg

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]."&nbsp";
} else {
print $find[$i]."&nbsp";
}}
?>

Lenke til kommentar
Videoannonse
Annonse

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

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

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
<?
$find = array("Dog","Horse","Cat","Bird");
for ($i=0; $i<count($find); $i++) {
if(preg_match("/(Dog|Cat)/i", $find, $match)) {
print $match[$i]."&nbsp";
} else {
print $find[$i]."&nbsp";
}}
?>

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]."&nbsp";
} else {
print $find[$i]."&nbsp";
}}
?>

 

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...