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
Nog geen reacties.