Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP]foreach-loop doet niets...

Ger
5 antwoorden
  • Ik heb een brok code die ik wil uit laten voeren over een forumbericht. Die begint zo:
    [code:1:09e63be861]//Hebben we een boek-bbcode?
    preg_match( "#\[boek\]([0-9]+)\[/boek]#", $message, $matches );
    $isbn = $matches[1];
    unset($matches);[/code:1:09e63be861]
    Met die $isbn wordt vervolgens de rest gedaan. Werkt goed. Probleem is echter, dat als er meerdere keren een [boek]-bbcode wordt gebruikt in het forumbericht, alleen de eerste wordt verwerkt. Daarom wilde ik een foreach-loop omheen bouwen:
    [code:1:09e63be861]preg_match( "#\[boek\]([0-9]+)\[/boek]#", $message, $isbnin );
    foreach ($isbnin as $isbn)
    {[/code:1:09e63be861]
    Maar dan lijkt $isbn dus ineens leeg te zijn. Wat doe ik hier fout?
  • Update… Ben alweer wat verder. Ik heb het zo getest:
    [code:1:9280ce5369]$isbnin = array('9075504764', '9021580594');
    foreach ($isbnin as $isbn)
    {[/code:1:9280ce5369]
    En dan wordt alles netjes gedaan. Doe ik echter hetvolgende:
    [code:1:9280ce5369]preg_match( "#\[boek\]([0-9]+)\[/boek]#", $message, $isbnin );
    foreach ($isbnin as $isbn)
    {[/code:1:9280ce5369]
    Dan gebeurt er niets. Terwijl ik toch altijd heb begrepen dat met een preg_match de $isbnin een array wordt. Ofwel, hetzelfde. Waarom krijg ik dan niets eruit?
  • Nu ben ik totaal geen ster in regular expressions, maar volgens mij ga je op zoek naar iets als "[boek]1234567890[/boek]". En dat is wat anders dan alleen een isbn-nummer…
  • Een preg_match werkt (bij mijn weten) zo:
    [code:1:f69f38da96]preg_match($patroon, $inputstring, $outputarray ); [/code:1:f69f38da96]
    $patroon is in dit geval [b:f69f38da96]"#\[boek\]([0-9]+)\[/boek]#"[/b:f69f38da96]. Wat hij dus zoek is naar een patroon met [b:f69f38da96][boek]{aantal cijfers}[/boek][/b:f69f38da96], waarbij {aantal cijfers} variabel is. Die slaat hij op in de $outputarray.
    Wat me echter nu pas opvalt: ik vergeet de laatste blokhaak te escapen, dus het patroon klopt niet. Heb het script nu niet bij de hand, maar ga hier vanavond hoopvol mee verder. :)
  • preg_match[1] geeft je niet wat je wilt. Kijk eens goed in de documentatie. Wat jij zoekt is preg_replace of preg_match_all

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.