mysql_fetch_array sorteren met PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs M

Matthijs M

28/12/2011 22:53:31
Quote Anchor link
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.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
      }

?>
Gewijzigd op 28/12/2011 22:54:06 door Matthijs M
 
PHP hulp

PHP hulp

26/10/2020 02:15:20
 
Joren de Wit

Joren de Wit

28/12/2011 23:52:25
Quote Anchor link
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.
 
Matthijs M

Matthijs M

29/12/2011 16:23:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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";
                }

?>
 
Jeffrey G

Jeffrey G

20/01/2012 14:56:02
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.