Beste PHPers,

Nou ben ik zover dat ik heb uitgerekend hoeveel een woord voorkomt in één resultaat. Dit getal wil ik laten meewegen in de positie van het zoekresultaat.

Wanneer dit lukt heb ik een vrij simpele doch zeer functionele zoekmachine gebouwd.



<?php 
		while($row = mysql_fetch_array($res))
	  {
		echo "<li><a href='#'>" . $row['titel'] . "</a></li>";
			// Hier geef ik in feite aan dat voor 60% de 'tags' meetellen en voor 40% 'titel' meetellen
			$inhoud_titel_tekst_alles = "".$row['tags']."".$row['tags']."".$row['tags']."".$row['titel']."".$row['titel']."";
			// hiermee haal ik de codes eruit
			$html_esp_car = html_entity_decode($inhoud_titel_tekst_alles);
			$tekst_stripped = strip_tags($html_esp_car);
			// hierin zit een array die alle bijwoorden, lidwoorden, voornaamwoorden en dat soort spul eruit haalt
			include('wordreplacer.php');
			// hier wordend woorden getelt in de tekst
			$replaced = str_replace($array1, $array2, $tekst_stripped);
			$count1 = preg_match_all('%' . $q1 . '%', $replaced, $matches);
			$count2 = preg_match_all('%' . $q2 . '%', $replaced, $matches);
			$count3 = preg_match_all('%' . $q3 . '%', $replaced, $matches);
			$count4 = preg_match_all('%' . $q4 . '%', $replaced, $matches);
			$count5 = preg_match_all('%' . $q5 . '%', $replaced, $matches);
			// hier som ik deze allemaal op, en zou een sortering opleveren die me tot nu wel aanstaat
			$som = $count1 + $count2 + $count3 + $count4 + $count5;
			// De waarde van 'som' zou ik bepalend willen maken voor positie.
echo "<p>$som</p>";
	  }
?>
Als je later de positie van de resultaten nog wilt wijzigen, zul je even moeten wachten met het echoën van de output. Sla deze in plaats daarvan tijdelijk op in een array en koppel daar ook de berekende som aan. Vervolgens kun je met een van de sort() functies wel sorteren op die som om zo de posities vast te leggen. Tenslotte kun je dan vanuit die array de output weergeven.
Dat heb ik nu geprobeerd op verschillende manieren. Er zijn namelijk ook veel manieren om een array te sorteren.

Echt werken doet het niet bij mij.


<?php
	while($row = mysql_fetch_array($res))
	  {
		echo "
			
			<li><a href='#'></a></li>";
			// Hier geef ik in feite aan dat voor 60% de 'tags' meetellen en voor 40% 'titel' meetellen
			$inhoud_titel_tekst_alles = "".$row['tags']."".$row['tags']."".$row['tags']."".$row['titel']."".$row['titel']."".$row['tekst']."";
			// hiermee haal ik de codes eruit
			$totaalwoorden = str_word_count($inhoud_titel_tekst_alles);
			$html_esp_car = html_entity_decode($inhoud_titel_tekst_alles);
			$tekst_stripped = strip_tags($html_esp_car);
			// hierin zit een array die alle bijwoorden, lidwoorden, voornaamwoorden en dat soort spul eruit haalt
			include('wordreplacer.php');
			// hier wordend woorden getelt in de tekst
			$replaced = str_replace($array1, $array2, $tekst_stripped);
			$count1 = preg_match_all('%' . $q1 . '%', $replaced, $matches);
			$count2 = preg_match_all('%' . $q2 . '%', $replaced, $matches);
			$count3 = preg_match_all('%' . $q3 . '%', $replaced, $matches);
			$count4 = preg_match_all('%' . $q4 . '%', $replaced, $matches);
			$count5 = preg_match_all('%' . $q5 . '%', $replaced, $matches);
			// hier som ik deze allemaal op, en zou een sortering opleveren die me tot nu wel aanstaat
			$som = (($count1 + $count2 + $count3 + $count4 + $count5) / $totaalwoorden)*100;

	}
				$fruits = array($som => $row['titel']);
				asort($fruits);
				foreach ($fruits as $key => $val) {
					echo "$key = $val\n";
				}
?>
Ik gebruik altijd hetzelfde als jij hier doet, eerst asort en dan een loop, werkt perfect, zie eerlijk waar niet in waarom dat hier niet zo zou zijn.

Reageren