door array lopen + preg_match

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Femke

femke

10/06/2009 22:26:00
Quote Anchor link
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++;
}
}
Gewijzigd op 01/01/1970 01:00:00 door Femke
 
PHP hulp

PHP hulp

14/11/2024 23:03:29
 
Quote Anchor link
Ik schrijf er zelf ff iets voor je voor dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$namen
= array("ans","allert","anna","andrea","anne","allert","albert");
foreach($namen as $naam) {
    if(preg_match( '/an(A-Z)+/', $naam)) {
        echo $naam.'<br />';
    }
}

?>
 
Femke

femke

10/06/2009 23:37:00
Quote Anchor link
teuneboon schreef op 10.06.2009 23:35:
Ik schrijf er zelf ff iets voor je voor dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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
 
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?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;
?>
 
Willem Jan Z

Willem Jan Z

10/06/2009 23:58:00
Quote Anchor link
Serieus teuneboom, wel eens van substr gehoord?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $namen
= array("ans","allert","anna","andrea","anne","allert","albert");
    foreach ($namen as $naam)
        if (strtolower(substr($naam, 0, 2)) == 'an') echo $naam.' ';
?>
 
Femke

femke

11/06/2009 00:06:00
Quote Anchor link
WillemJan Z schreef op 10.06.2009 23:58:
Serieus teuneboom, wel eens van substr gehoord?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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
 

11/06/2009 00:09:00
Quote Anchor link
Kijk ook eens naar array_map.
 
Willem Jan Z

Willem Jan Z

11/06/2009 00:22:00
Quote Anchor link
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).
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?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 strpos en strlen.
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.
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.