Hej hej, Vet någon av er vart jag kan läsa om hur ma gör funktioner i php? Jag vill göra en funktion som byter ut olika ord mot andra. Någon som har några bra förslag på kurser om detta?
php fuktion
23 svar · 613 visningar · startad av Madoor
str_replace()
http://se.php.net/str_replace
ok, tack så mycket.
Det var ju ungefär som i ASP.
kan jag göra så här?:
$olle = "hej jag heter olle";
$olle = str_replace("hej", "hejdå", ".$olle$.");
$olle = str_replace("jag", "du", ".$olle$.");
???
Ja, ungefär. En funktion borde kunna se ut så här:
function myreplace($olle) {
$olle = str_replace("hej", "hejdå", $olle);
$olle = str_replace("jag", "du", $olle);
return $olle;
}
Well, nu gissar jag bara, för jag kan egentligen inte php. Men någon gång måste även jag börja. ;)
Hoppas jag inte leder in dig på fel spår bara.
Mvh
vad gör "return $olle;"?
Du kallar på funktion sisomså:
echo myreplace("hej jag heter olle");
return i funktionen returnerar den färdigreplacade strängen till den som kallade på funktionen. Likt funktionsnamn = strOlle, som du använder för att returnera något från en funktion i asp.
Mvh
Så här skulle jag ha löst functionen:
$olle = "Hej, jag heter Olle.";
function myreplace($olle) {
$olle = str_replace("hej", "hejdå", $olle);
$olle = str_replace("jag", "du", $olle);
return $olle;
}
echo (myreplace($olle));
Så snabel-a tänker helt rätt! Vi har bara lite olika när vi hämtar funktionen.
tack så mycket. Jag ska genast testa
Nu blev det fel... Första gången jag testade fungerade det fint! men inte nu längre. vad betyder detta fel?:
Fatal error: Call to undefined function: myreplace() in classes.php on line 360
rad 360: echo (myreplace($bodyinfo));
Den hittar inte funktionen.
Själva funktionen ('myreplace') måste finnas innan du kan anropa den.
D.v.s. du måste ha det så här
$olle = "Hej, jag heter Olle.";
function myreplace($olle) {
$olle = str_replace("hej", "hejdå", $olle);
$olle = str_replace("jag", "du", $olle);
return $olle;
}
echo (myreplace($olle));
Du kan inte ha det så här
$olle = "Hej, jag heter Olle.";
echo (myreplace($olle));
function myreplace($olle) {
$olle = str_replace("hej", "hejdå", $olle);
$olle = str_replace("jag", "du", $olle);
return $olle;
}
funktionern ligger i en fil jag har inkluderat högre upp =/
#####UPPDATERING#######
nu fungerar det! Jag hade råkat skriva http://adressen.... istället för ../adressen...
då har jag ännu en fråga.
Jag har några saker som jag vill byta ut till samma sak.
istället för att göra massor av:
$bodyinfo = str_replace("kalle", "<a href='kalle.php'></a>", $bodyinfo);
$bodyinfo = str_replace("Kalle", "<a href='kalle.php'></a>", $bodyinfo);
vill jag göra såhär:
$bodyinfo = str_replace("kalle" or "Kalle", "<a href=''>" $ordet "</a>", $bodyinfo);
går det på något sätt? är det kalle med litet "k" ska $ordet bytas ut mot "kalle", är kalle med stort "k" ska $ordet bytas ut mot "Kalle"
eller skulle en sådan funktion slöa ner sidan mer än om man gör en massa $bodyinfo???
Just nu har jag runt 30:
$bodyinfo = str_replace("kalle", "<a href='kalle.php'></a>", $bodyinfo);
$bodyinfo = str_replace("Kalle", "<a href='kalle.php'></a>", $bodyinfo);
slöar det ner sidan väldigt mycket?
Testa o kolla lite på reg exp (http://se.php.net/manual/sl/ref.regex.php), det bör nog hjälpa dig.
Hinner dock inte med någe bättre expempel just nu, men det e inte så svårt så du kan nog lära dig det genom att kolla länken jag gav dig. :)
GrodanBoll skrev:
Du kan inte ha det så här
$olle = "Hej, jag heter Olle."; echo (myreplace($olle)); function myreplace($olle) { $olle = str_replace("hej", "hejdå", $olle); $olle = str_replace("jag", "du", $olle); return $olle; }
Det går alldeles utmärkt att anropa funktionen innan du deklarerar den.
GrodanBoll, tack för svaret. Men tyvärr måste jag fråga hur det ska hjälpa.
Jag förstår ungefär vad jag ska göra. Men jag fattar inte det där med [¤&)(/¤#] =/
####UPPDATERING######
Nu tror jag att jag har fixat det! Jag har kollat runt en massor och testat ännu mer och nu kommit fram till detta:
$bodyinfo = preg_replace("#(kalle)#i", "<br><b>\\1</b><br>", $bodyinfo);
men nu har jag några frågor bara för att jag klarade det! Är det en bra funktion jag har kommit fram till? varför behöver jag ha "#" och "#i"? Kan jag sätta in en OR funktion i det så att det blir:
$bodyinfo = preg_replace("#(kalle) OR (olle)#i", "<br><b>\\1</b><br>", $bodyinfo);
?
Darren skrev:
Det går alldeles utmärkt att anropa funktionen innan du deklarerar den.
Jaha, alltid lär man sig någe nytt. :r
Hmm, om jag har förstått dig rätt så får du en variabel t.ex. 'kalle', 'Kalle' eller kanste t.o.m. 'kAllE', omvandla denna till gemener d.v.s. i vårt exempel 'kalle' och sätta in denna i en annan sträng?
Om det är så är det lättast att bygga en funktion som tar som inparameter strängvariabel och returnerar en annan.
function omvandlaTextstrang($str)
{
$str = strtolower($str); // omvandlar till gemener
$str = "<a href='".$str.".php'></a>"; //sätter in variablen i rätt text
return $str //returnerar den omvandlade strängen
}
Om det e som jag skriver ovan så glöm villovägen regexp som jag skickade in dig på.
Tack, men saken är den att jag vill att om det står Kalle från början ska det cokså skrivas ut Kalle. Står det KaLLe från början ska det skrivas ut KaLLe...
Den funktionen jag gjorde funkade bra på det sättet! den brydde sig inte om om det var stora eller små bokstäver och den skrev ut med lika stora bokstäver som innan texten hade gått igenom funktionen.
oki, frågan som följer då:
är den funktionen som jag kom på snabbare än dessa två tillsammans?
$bodyinfo = str_replace("Kalle", "<a href='kalle.php'>kalle</a>", $bodyinfo);
$bodyinfo = str_replace("Kalle", "<a href='kalle.php'>Kalle</a>", $bodyinfo);
Det är så att jag har tre stycken olika ord som jag vill göra till samma länk. Kalle ska göras till <a href='kalle.php'>Kalle</a>, Olle ska göras till <a href='kalle.php'>Olle</a> och Pelle ska göras till <a href='kalle.php'>Pelle</a> + att alla dessa ord ska fungera när de inte är skrivna med stor bokstav i början.
Därför hade jag tänkt mig att det skulle gå att göra en sådan här funktion på något sätt:
$bodyinfo = preg_replace("#(kalle OR pelle OR olle)#i", "<br><b>\\1</b><br>", $bodyinfo);
\\1 ska i detta fall skriva ut det ord som den "replacar" (kommer inte på det svenska ordet nu... hjärnsläpp)
eller om det går fortare:
$bodyinfo = str_replace("Kalle OR Pelle OR Olle OR kalle OR pelle OR olle", "<a href='kalle.php'>\\1</a>", $bodyinfo);
\\1 ska göra samma sak som jag skrev längre upp.
Förstår du vad jag vill göra?
Testa det här:
$pattern = array("/Kalle/i", "/Pelle/i", "/Olle/i");
$bodyinfo = preg_replace($pattern, "<a href=\"kalle.php\">$0</a>", $bodyinfo);
tack det fungerar bra!
men svar leder till frågor.
\"kalle.php\" <--- Varför är den ena \ innanför " och den andra utanför? och varför behöver man skriva \ \ över huvud taget?
Jag har sett att man ibland använder \0 och ibland $0 När använder man vad?