mysql_fetch_array sorteren met PHP
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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>";
}
?>
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>";
}
?>
Gewijzigd op 28/12/2011 22:54:06 door Matthijs M
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.
Echt werken doet het niet bij mij.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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";
}
?>
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.