login  Naam:   Wachtwoord: 
Registreer je!
 Forum

array_search() alleen eerste hit

Offline Dark_Paul - 01/12/2006 16:57
Avatar van Dark_PaulPHP ver gevorderde Hej,

Met mijn zoeksysteem maak ik gebruik van een 'filter', die de positie van de term uit de array haalt.
Ik loop alleen tegen een probleem aan, als ik een woord intyp dat maar één keer vookomt werkt het. Typ ik echter een woord in dat meerdere keren voorkomt in de haystack, dan wordt er niets teruggegeven.
Ik heb een eigen array_isearch() functie geschreven, aangezien er geen hoofdletterongevoelige array_search() bestaat.
Mijn functie:
  1. <?php
  2. function array_isearch ($term, $stack) {
  3. $stack = strtolower($stack);
  4. $term = strtolower($term);
  5. $stack = explode(' ', $stack);
  6. return $place;
  7. }
  8. ?>

Hoe zorg ik ervoor, dat van een term die meerdere malen voorkomt, alleen de positie van de eerste hit wordt gegeven?

3 antwoorden

Gesponsorde links
Offline Ibrahim - 01/12/2006 20:58
Avatar van Ibrahim PHP expert in een array zet je alle resultaten, en je haalt dan de eerste van die array eruit door $resultaten[0] te doen
Offline nemesiskoen - 02/12/2006 09:25
Avatar van nemesiskoen Gouden medaille

PHP expert
ik weet niet waar jij hebt leren programmeren maar dat is de banaalste functie ever
Offline Dark_Paul - 02/12/2006 18:25
Avatar van Dark_Paul PHP ver gevorderde De functie hier is inderdaad wat vreemd, ik was namelijk een stukje vergeten erbij te plakken hier.
Toch werkt de functie nog niet goed. Ik krijg niet altijd een resultaat voor $place; terug. Dit zijn de functies:
  1. <?php
  2. function array_isearch ($term, $stack) {
  3. $stack = strtolower($stack);
  4. $term = strtolower($term);
  5. $stack = explode(' ', $stack);
  6. $place = array_search($term, $stack);
  7. return $place;
  8. }
  9. function zoekterm($stack, $term) {
  10. $place = array_isearch($term, $stack);
  11. $place = $place[0];
  12. $stack = explode(' ', $stack);
  13. $count = count($stack)-1;
  14. $result = array();
  15.  
  16. if ($place > $count-10) {
  17. $offset = $count - $place;
  18. }
  19. elseif ($place-10 < 0) {
  20. $offset = 10-$place;
  21. }
  22. else {
  23. $result[] = '...';
  24. for($i=($place-9); $i < ($place+10); $i++) {
  25. $result[] = $stack[$i];
  26. }
  27. $result[] = '...';
  28. }
  29. $res = implode(' ', $result);
  30. $res = ubb_code($res);
  31. $res = preg_replace("#(".$term.")+#i", "<strong>\\1</strong>", $res);
  32. return $res;
  33. }
  34. ?>

en zo roep ik ze aan:
  1. <?php
  2. if (mysql_num_rows($qzoek) > 0) {
  3. $tpl -> NewBlock('zoekresultaten');
  4. $tpl -> Assign(array('resultaten' => mysql_num_rows($qzoek), 'zoekterm' => $zoekterm));
  5. while ($res = mysql_fetch_assoc($qzoek)) {
  6. $tpl -> NewBlock('zoekresultaat');
  7. $tpl -> Assign(array('pagina' => $res['pagina'],
  8. 'titel' => $res['titel'],
  9. 'resultaat' => zoekterm($res['inhoud'], $zoekterm)));
  10. }
  11. ?>

Wat ook wel vervelend is, is dat de deadline vanavond 0.00u is...
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.202s