Hoi,

Ik zoek een manier om een gedeelte van een $nogwat uit te lezen.
Het verschilt steeds wat het is, ongeveer zoiets (puur voorbeelden):

$testje = "http://www.bla.nl/test/4567843/nogwat/ennogwat.html";


$testje = "http://www.bla.nl/doei/3961324/nogwat/ennogwat.html";


$testje = "http://www.bla.nl/hoi/0851534/nogwat/ennogwat.html";

Wat wel altijd aanwezig is is /PAARGETALLEN/.

Nu wil ik dus dat ik alleen het gedeelte /PAARGETALLEN/ eruit haal (en de rest niet).
Het zal iets moeten worden van:

$getal = $testje(alleen /PAARGETALLEN/;
echo $getal;

Weet iemand hoe ik dit precies kan doen?

Gr. Kees.
Je zou door middel van patroonherkenning met behulp van reguliere expressies het patroon "/<hier enkel cijfers>/" uit een URL kunnen vissen.

Als je deze bewerking vaker wilt uitvoeren kan het handig zijn om deze in een functie onder te brengen.

Dit ziet er dan bijvoorbeeld als volgt uit:
<?php
// retourneert false indien geen match, en anders het getal
function getIdFromURL($input) {
    $match = false;
    preg_match('#/([0-9]+)/#', $input, $matches);
    if (count($matches) == 2) {
        $match = $matches[1]; // gebruik $matches[0] voor het getal inclusief /slashes/
    }
    return $match;
}

// vanaf hier enkele voorbeelden

$urls = array(
    'http://www.bla.nl/test/4567843/nogwat/ennogwat.html',
    'http://www.bla.nl/doei/3961324/nogwat/ennogwat.html',
    'http://www.bla.nl/hoi/0851534/nogwat/ennogwat.html',
    'http://www.bla.nl/oops/wut.html',
);

foreach ($urls as $url) {
    ?><h2><?php echo $url ?></h2><?php
    $match = getIdFromURL($url);
    if ($match === false) {
        echo '[geen match] er kwam geen getal in de url voor';
    } else {
        echo '[match] '.$match;
    }

    ?><hr /><?php
}
?>
En hoe kan ik het zonder functie doen?
Ik red me aardig met basis php maar dit is me net even te moeilijk :)
Overigens hoeft er maar 1 url gecontroleerd te worden en niet 4 zoals in dit voorbeeld :)

Ben jij toevallig trouwens ook lid op sitemasters.be, ik had daar ook dezelfde vraag gesteld en kreeg exact hetzelfde antwoord :P

Bedankt alvast voor de hulp, erg fijn!

EDIT

Ik heb het een klein beetje aangepast naar 1 URL en wat minder code.
het is nu zo geworden en het werkt perfect!
Mogelijk kan het met nog wel minder code maar ik vind het al fijn dat ik de code nu begrijp en dat het werkt.
Mocht iemand het nog mooier kunnen coden is dat prima (en dan zal ik het vervangen) maar ik heb nu in ieder geval al deze werkende code:

// retourneert false indien geen match, en anders het getal
function getIdFromURL($input) {
    $match = false;
    preg_match('#/([0-9]+)/#', $input, $matches);
    if (count($matches) == 2) {
        $match = $matches[0]; // gebruik $matches[0] voor het getal inclusief /slashes/
    }
    return $match;
}

$url = $link;

    $match = getIdFromURL($url);
    if ($match === false) {
        echo '[geen match] er kwam geen getal in de url voor';
exit;
    } else {
        echo $match;
    }
Als het deel met cijfers altijd op dezelfde plek zit t.o.v. het begin van de data kun je met behulp van een Explode ook goed uit de voeten denk ik.
Peter K op 27/10/2015 19:43:44

Als het deel met cijfers altijd op dezelfde plek zit t.o.v. het begin van de data kun je met behulp van een Explode ook goed uit de voeten denk ik.

Dan moet je nog steeds op een of andere manier constateren dat dat deel enkel uit cijfers bestaat.

Uit de oorspronkelijke spec werd ook niet expliciet duidelijk of de numerieke passage altijd op dezelfde plek zit.
Thomas van den Heuvel op 27/10/2015 19:48:13

[quote="Peter K op 27/10/2015 19:43:44"]
Als het deel met cijfers altijd op dezelfde plek zit t.o.v. het begin van de data kun je met behulp van een Explode ook goed uit de voeten denk ik.

Dan moet je nog steeds op een of andere manier constateren dat dat deel enkel uit cijfers bestaat.

Uit de oorspronkelijke spec werd ook niet expliciet duidelijk of de numerieke passage altijd op dezelfde plek zit.

[/quote]

Dit kun je eventueel doen met is_numeric()

Zoals ik het begrepen heb staat de cijfercombinatie steeds op dezelfde plaats.

Reageren