Ik abstraheer mijn vraag als voorbeeld

ik heb een array met namen bv

$namen = array("ans","allert","anna","andrea","anne","allert","albert");

nu wil ik bv dat hij alle namen achterelkaar zet die opeenvolgend met "an" beginnen,
dit vb zou dus geven:
"ans" en "anna andrea anne"
hoe kan ik dit recursief laten werken ipv zelf alle preg_matches achter elkaar te moeten zetten?

$i=0;
while($i<sizeof($namen)){

if(preg_match( '/an(A-Z)+/', $namen[$i])){
if(preg_match( '/an(A-Z)+/', $namen[$i+1])){
if(preg_match( '/an(A-Z)+/', $namen[$i+2])){
echo $namen[$i]. ' '.$namen[$i+1].' ' . $namen[$i+2];
$i+2;
}
}
}
else {
$i++;
}
}



Ik schrijf er zelf ff iets voor je voor dan:
<?php
$namen = array("ans","allert","anna","andrea","anne","allert","albert");
foreach($namen as $naam) {
if(preg_match( '/an(A-Z)+/', $naam)) {
echo $naam.'<br />';
}
}
?>
teuneboon schreef op 10.06.2009 23:35
Ik schrijf er zelf ff iets voor je voor dan:
<?php
$namen = array("ans","allert","anna","andrea","anne","allert","albert");
foreach($namen as $naam) {
if(preg_match( '/an(A-Z)+/', $naam)) {
echo $naam.'<br />';
}
}
?>


dat is niet wat ik bedoel, ik wil een string opbouwen die resultaat is van opeenvolgende checks of element met 'an' is begonnen
In mijn vorige script zat een foutje, kan zelf ook niet heel goed met preg_match omgaan namelijk ;). Dit geeft een string terug met alle namen die met an beginnen:
<?php
$namen = array("ans","allert","anna","andrea","anne","allert","albert");
$string = '';
foreach($namen as $naam) {
$eerstetwee = $naam{0}.$naam{1};
if(strtolower($eerstetwee) == 'an') {
$string .= $naam.'<br />';
}
}
echo $string;
?>
Serieus teuneboom, wel eens van substr gehoord?


<?php
    $namen = array("ans","allert","anna","andrea","anne","allert","albert");
    foreach ($namen as $naam)
        if (strtolower(substr($naam, 0, 2)) == 'an') echo $naam.' ';
?>
WillemJan Z schreef op 10.06.2009 23:58
Serieus teuneboom, wel eens van substr gehoord?


<?php
    $namen = array("ans","allert","anna","andrea","anne","allert","albert");
    foreach ($namen as $naam)
        if (strtolower(substr($naam, 0, 2)) == 'an') echo $naam.' ';
?>


hi, maar dit is nog steeds niet wat ik bedoel, begrijpen jullie mijn vraag of moet ik het verder uitleggen?

Stel je hebt een zin gecodeerd

In Amsterdam[L] woon Jan[P] Pieter[P] Janssen[P] samen met zijn moeder Annebet[P] Janssen[P].

Nu maak ik van die zin een array op woord niveau en wil ik dus checken of het volgende element ook van hetzelfde type is dus "Jan Pieter Janssen" en "Annebet Jannsen" als ik op P check
Kijk ook eens naar [php]array_map[/php].
Zoiets is dan mogelijk (de rest kan je dan zelf wel neem ik aan, hiermee laat ik alleen even zien hoe je het zou kunnen checken).
<?php
if (isset($_GET['q'])) {

$string = "In Amsterdam[L] woon Jan[P] Pieter[P] Janssen[P] samen met zijn moeder Annebet[P] Janssen[P].";
preg_match_all('/([a-z0-9]+\['.$_GET['q'].'\]+)/is', $string, $matches);
echo '<pre>';
var_dump($matches[1]);
}
?>

Je vraagstelling is alleen verre van duidelijk! Dit lijkt namelijk in de verste verte niet op wat je in je eerst post vroeg.

edit: Lees je vraag nog een keer, en snap nu iets beter wat je wilt. Interessant vraagstuk, helaas moet ik nu echt gaan slapen, dus kan er niet teveel mee bezig.
Maar het zou mogelijk kunnen zijn met de preg_match die ik net maakte, in combinatie met [php]strpos[/php] en [php]strlen[/php].
Je gaat die $matches doorlopen met foreach, als de strpos van de huidige match, strlen+1 verder is dan de vorige match, dan horen ze bij elkaar, anders niet.
Maar blijft lastig geval.

Reageren