door array lopen + preg_match
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
Code (php)
1
2
3
4
5
6
7
8
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 />';
}
}
?>
$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:
Code (php)
1
2
3
4
5
6
7
8
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 />';
}
}
?>
$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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
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;
?>
$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;
?>
WillemJan Z schreef op 10.06.2009 23:58:
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
Code (php)
1
2
3
4
5
6
7
8
9
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]);
}
?>
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