Hallo Allemaal,

Ik ben bezig met het opslaan van meldingen vanuit een rss feed. Nu wil ik de inhoud van de Rss feed eerst wat aanpassen voor het word opgeslagen. Ik heb bijvoorbeeld:

25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217

Nu wil ik alleen opslaan 25-901 A1 ALMERE Leeuwerikweg
Dus alles na het woord COORD moet worden verwijderd, is dit mogelijk en zo ja met welke functie???

Matthijs Vos
Of explode


<?php
$str = '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$arr = explode('COORD',$str);
echo $arr[0]; //25-901 A1 ALMERE Leeuwerikweg 
echo $arr[1]; // M 14 B RIT:217
?>
Kan inderdaad ook, al zou ik het in 1 regel doen:
<?php
$str = '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$str = reset(explode('COORD',$str));

echo $str;
?>
Of, wat mogelijk is sinds PHP5.4:
<?php
$str = '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$str = explode('COORD',$str)[0];

echo $str;
?>
Wouter J op 22/06/2012 17:46:38

<?php
$str = '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$str = reset(explode('COORD',$str));

echo $str;
?>


Incorrect: op het eerste gezicht lijkt dit te kloppen, maar als je het uittest dan krijg je een keiharde foutmelding (Strict Standards: Only variables should be passed by reference). Zou je reset() op een nieuwe regel plaatsen, dan werkt het wel.

<?php
$str = '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';
$str = current(explode('COORD',$str));
echo $str;
?>

werkt daarentegen prima.
Indien je meerdere strings wilt checken en meerdere woorden makkelijker wilt uitfilteren, is een dergelijke functie als woordfilter wel handig.

<?php
function woordfilter($text)
{
$filter = array("COORD","anderewoorden");
$text = str_replace($filter,"", $text);
return $text;
}

// voorbeeld input
$gegevens = "25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217";

// langs de woordfilter
$gegevens = woordfilter($gegevens);

/* output $gegevens :
25-901 A1 ALMERE Leeuwerikweg M 14 B RIT:217
*/

?>



B polak, weer een leesfoutje:
Dus alles na het woord COORD moet worden verwijderd
Wouter J op 22/06/2012 23:10:30

B polak, weer een leesfoutje:
Dus alles na het woord COORD moet worden verwijderd



Moet je weer poepen? Mag wel hoor Wouter, maar doe het voortaan uit het zicht.
Ach, jou oplossing kan misschien wel leuk en goed zijn (niet echt snel, maar dat is mijn PREG oplossing ook niet), maar het lost totaal niet op wat de TS vraagt. Want op deze manier kun je nooit alles na een woord weghalen.

Als je de oplossing van Roy wilt gebruiken met meerdere woorden kun je zoiets doen:
<?php
function filter_word($str, $filters)
{
if (!is_array($filters)) {
$filters = array($filters);
}

foreach ($filters as $filter) {
$str = current(explode($filter, $str));
}
return $str;
}
?>

Of met mijn PREG oplossing (trager, die van Roy is de beste):
<?php
function filter_word($str, $filters)
{
if (!is_array($filters)) {
$filters = array($filters);
}

$filters = implode('|', preg_quote($filters));

return preg_replace('/('.$filters.').*?$/m', '', $str);
}
?>

Gebruik:
<?php
$text = '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217';

// enkel filter
$newText = filter_word($text, 'COORD'); // 25-901 A1 ALMERE Leeuwerikweg

// meerdere filters
$newText1 = filter_word($text, array(
'COORD',
'ALMERE',
)); // 25-901 A1
?>

Het enige verschil tussen de, snellere, oplossing van Roy en die van mij is dat die van mij tot aan de linebreak gaat. Dat kan heel handig zijn, denk bijv. als je een string hebt waarin meerdere regels zitten en je elke regel wilt verwijderen achter COORD:
<?php
$text = '25-901 A1 ALMERE Leeuwerikweg COORD M 14 B RIT:217
21-486 D26 AMSTERDAM Rembrandtlaan COORD M 12 B RIT:172';

$newText = filter_word($text, 'COORD');
// 25-901 A1 ALMERE Leeuwerikweg
// 21-486 D26 AMSTERDAM Rembrandtlaan
?>
Heey Allemaal,

Bedankt voor alle oplossingen. Het is me gelukt met de explode methode.

Reageren