Scripts
citaten() óf quotes()
Een functie om uit een lang stuk tekst bepaalde woorden/zinsdelen te halen en deze netjes weer te geven. $tekst moet een string zijn, of een array met 1 key $zoekwoorden een array (maar een string met ", "-gescheiden mag ook) $rondom en $beetje moeten een getal zijn, als string of int. Als iemand dan nog tips heeft voor wat er gebeurd bij Artikel 11 (de eerste 'n')... laat dat dan even weten (zie voorbeeld-link).
citaten-f-quotes
<?php
// functie "citaten"
// Aanroepen: $tekst = citaten($tekst, $zoekwoorden, $rondom, $beetje);
// Of kort: $tekst = citaten($tekst, $zoekwoorden);
// Voorbeeld: $tekst = citaten($tekst, $zoekwoorden, 20, 5);
function citaten($begintekst, $zoekwoorden, $rondom = 75, $beetje = 10 )
{
// vars instellen
$begintekst = strip_tags($begintekst);
$rondom = intval($rondom);
$beetje = intval($beetje);
$tekst = "";
$i = 0;
$positie = "";
$maximaal = strlen($begintekst);
$minimaal = 0;
$getallen = array();
$offset = 0;
$extra = 0;
$aantal = 0;
// controleer of $begintekst een string is
if (!is_string($begintekst))
{
// is dit een array? Wellicht kunnen we nog iets doen?
if(is_array($begintekst))
{
// als $begintekst een array is met maar 1 waarde... dan pakken we die gewoon
if(count($begintekst) == 1)
{
// neem key 0 (1 waarde dus) als $begintekst
$begintekst = $begintekst[0];
}
}
else
{
// return false... met $begintekst kunnen we niets
return false;
}
}
// controleer of $zoekwoorden een array is
if(!is_array($zoekwoorden))
{
// zo niet: exploden op komma/spatie
if(strpos($zoekwoorden, ", ")){explode(", ",$zoekwoorden);}
}
// nogmaals controleren
if(!is_array($zoekwoorden))
{
// return false... met $begintekst kunnen we niets
return false;
}
// alle zoekwoorden afgaan
foreach ($zoekwoorden as $woord)
{
// kijk hoeveel keer dit woord voor komt
preg_match_all("/$woord/i", $begintekst, $keren);
// alle woorden vinden
while($offset = strpos($begintekst, $woord, $offset + 1))
{
// tellers instellen
$i++;
$aantal = $i;
// gegevens opslaan
$posities[$i]['woord'] = $woord;
$posities[$i]['lengte'] = strlen($woord);
// zoeken naar eerste letter van dit woord
$posities[$i]['woord_begin'] = $offset;
// einde van dit woord berekenen
$posities[$i]['woord_eind'] = $posities[$i]['woord_begin'] + $posities[$i]['lengte'];
// begin van deze regel berekenen
$posities[$i]['zin_begin'] = $posities[$i]['woord_begin'] - $rondom;
if ($posities[$i]['zin_begin'] < $minimaal) {$posities[$i]['zin_begin'] = $minimaal;}
if ($posities[$i]['zin_begin'] < $beetje) {$posities[$i]['zin_begin'] = $minimaal;}
// eind van deze regel uitrekenen
$posities[$i]['zin_eind'] = $posities[$i]['woord_eind'] + $rondom;
if ($posities[$i]['zin_eind'] > $maximaal) {$posities[$i]['zin_eind'] = $maximaal;}
if (($maximaal - $posities[$i]['zin_eind'])< $beetje) {$posities[$i]['zin_eind'] = $maximaal;}
}
}
// kijk of er resultaten zijn in $posties
if (isset($posities))
{
//toon_array($posities);
// de array $posities sorteren op volgorde
usort($posities, "sort_key_eigen");
// teller weer instellen op 1
$i = 0;
// loop alle getallen af
while($i <= $aantal - 1)
{
// echo "\$i is nu $i<br>";
// deze zin uit de begintekst halen
$temp = substr($begintekst, $posities[$i]['zin_begin'], ($posities[$i]['zin_eind'] - $posities[$i]['zin_begin']));
// highlight de gezochte woorden met behulp van de functie
$temp = highlight($temp, $zoekwoorden);
// als er nog een zin is
if (!empty($temp))
{
// als de zin met NIET op 0 begint: geen punten tonen
if ($posities[$i]['zin_begin'] != 0) {$tekst = $tekst . "...";}
// tekst aanvullen met de nieuwe gegevens
$tekst = $tekst . $temp;
// als de zin met NIET op $maximaal stopt: geen punten tonen
if ($posities[$i]['zin_eind'] != $maximaal) {$tekst = $tekst . "...";}
// sowieso een enter toevoegen
$tekst = $tekst . "<br>";
}
// kijk of we het eind van het bericht al hebben berijkt (zo ja: $i met $aantal verhogen)
if ($posities[$i]['zin_eind'] == $maximaal)
{
// volgende overslaan (stoppen dus)
$extra = $aantal;
}
// kijk of het woord al een keer in deze zin staat
if (strpos($temp, $posities[$i]['woord'], ($rondom+1)))
{
// volgende overslaan
$extra = 0;
}
// teller verhogen
$i = $i + 1 + $extra ;
}
}
// $tekst terugeven
return $tekst;
}
?>
Reacties
0