Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] zoekresultaten ordenen (https://forum.scholieren.com/showthread.php?t=571105)

deathz0rz 17-08-2003 20:08

[PHP] zoekresultaten ordenen
 
uit mijn zoek-script komt een array:

$search[$keyword][$pageid]=array(0 => $min, 1 => $max);

met daarin de gevonden range met een keyword (1 per pagina).

Nu wil de resultaten uitprinten, waarbij ie de stukjes text print, die staan in

$cache[$pageid]=$text;

en ik wil natuurlijk dat als stukken van de range elkaar overlappen dat ie dat aan elkaar print, dus niet twee x het zelfde stuk met ... ertussen.

edit: voorbeeld voor een $search array:
Array
(
  [windows xp] => Array
    (
      [2] => Array
        (
          [0] => 132
          [1] => 176
        )
      [4] => Array
        (
          [0] => 178
          [1] => 222
        )
      [6] => Array
        (
          [0] => 149
          [1] => 193
        )
    )
  [icon] => Array
    (
      [2] => Array
        (
          [0] => 343
          [1] => 387
        )
      [4] => Array
        (
          [0] => 309
          [1] => 353
        )
      [1] => Array
        (
          [0] => 14
          [1] => 58
        )
      [6] => Array
        (
          [0] => 152
          [1] => 196
        )
    )
  [api] => Array
    (
      [2] => Array
        (
          [0] => 0
          [1] => 56
        )
      [4] => Array
        (
          [0] => 522
          [1] => 578
        )
    )
)

Triloxigen 17-08-2003 20:55

Euhm, hoe wil je ordenen (oplopend/aflopend, bedoel je dat?)?
Of lees ik ergens overheen?

deathz0rz 17-08-2003 20:57

dat boeit niet echt, maar hij moet dus per pagina stukjes tekst printen, google like

Gimme more beer 17-08-2003 21:06

Citaat:

deathz0rz schreef op 17-08-2003 @ 21:57:
dat boeit niet echt, maar hij moet dus per pagina stukjes tekst printen, google like
Bedoel je dan dat hij gewoon je array moet uitlezen en dan elke keer gewoon 10 per pagina moet printen?

Want dan kun je de array gewoon 10 voor 10 uit laten lezen (ik heb niet zo snel een voorbeeld voor je), ik werk altijd zo met mijn database uitlezen.

Je geeft startwaardes door naar de volgende/vorige pagina, die leest de array weer uit vanaf die startwaarde tot de startwaarde +10...

Bedoel je zoiets?

Want dat doe je toch gewoon met een while (toch?)...

Triloxigen 17-08-2003 21:10

Ik snap niet precies wat je wilt :D

Maar kijk eens naar de volgende functies:
for()
while()
list()

deathz0rz 17-08-2003 21:18

eeh nee dat is helemaal niet wat ik bedoel :S

lezen jullie wel goed eigk? mssn is het een beetje moeilijk uit te leggen... daarom heb ik ook een voorbeeld van zon array erbij gedaan

Gimme more beer 17-08-2003 21:20

Citaat:

deathz0rz schreef op 17-08-2003 @ 22:18:
eeh nee dat is helemaal niet wat ik bedoel :S

lezen jullie wel goed eigk? mssn is het een beetje moeilijk uit te leggen... daarom heb ik ook een voorbeeld van zon array erbij gedaan

*still confused* :confused:

deathz0rz 17-08-2003 21:59

stel je hebt deze pagina's:

1 Rob Stenders en Ruud de Wild blijven bij 3FM:
Rob Stenders blijft in de ochtend op Radio 3FM. Hij heeft wel met wat andere stations zoals Yorin FM gesproken, maar hij wil toch liever gewoon op 3FM blijven. Hetzelfde geldt voor Ruud de Wild. De populaire dj blijft gewoon het middagprogramma Ruuddewild.nl maken op 3FM. Ook bij Ruud was er even sprake van dat hij misschien weg zou gaan. Met de twee dj's begint het publieke popstation in september met een nieuwe programmering. Doordeweeks veranderen er drie dingen in vergelijking met nu. Zo is voortaan Claudia de Breij tussen 12 en 14 uur te horen met het programma 'Claudia d'r op!'. Henk Westbroek maakt plaats voor haar. De avond is compleet vernieuwd. Giel Beelen volgt Isabelle Brinkman tussen 18 en 20 uur op die naar SBS Shownieuws vertrok. Tussen 20 en 22 uur gaat dj Timur Perlin een programma maken. Hij komt van Yorin FM af.

2 Noor verwondt zes vrienden op verjaardagsfeest:
Een Noorse man heeft op een surprise-party ter ere van zijn 40e verjaardag per ongeluk zes gasten beschoten en verwond. Hij trof een vrouw in haar benen, vijf anderen raakten lichtgewond. De Noor was erachter gekomen dat zijn vrienden in een bos een surprise-party hadden georganiseerd. Hij besloot hen vervolgens zelf te verrassen door vanuit de struiken ineens met een geweer in de lucht te schieten. Hij deed dit, maar struikelde daarna, waardoor het wapen opnieuw af ging. De Noor is in shocktoestand opgenomen in het ziekenhuis.

3 Groep gijzelaars in Mali vrijgelaten:
Het Duitse tv-station ZDF meldt dat de groep Europese gijzelaars in Mali is vrijgelaten. De groep werd dit voorjaar ontvoerd in de Algerijnse Sahara. Onder de gijzelaars bevindt zich ook een Nederlander: Arjen Hilbers. Het ministerie van Buitenlandse Zaken wil het bericht nog niet bevestigen. Een verslaggever van de ZDF meldt dat functionarissen uit Nederland, Duitsland en Zwitserland zouden klaarstaan om de 14 gijzelaars te verwelkomen. De Duitse staatssecretaris van Buitenlandse Zaken kwam vandaag in Bamako aan met een ziekenboeg. Vandaag of morgen zouden ook de gijzelaars daar aankomen. Volgens de verslaggever is er losgeld betaalt door vermoedelijk de Malinese regering.

je zoekt naar 'en de het'

daarbij hoort deze array:

Code:

Array
(
  [de] => Array
    (
      [1] => Array
        (
          [0] => 0
          [1] => 55
        )
      [2] => Array
        (
          [0] => 158
          [1] => 220
        )
      [3] => Array
        (
          [0] => 6
          [1] => 68
        )
    )
  [en] => Array
    (
      [1] => Array
        (
          [0] => 506
          [1] => 568
        )
      [2] => Array
        (
          [0] => 78
          [1] => 140
        )
      [3] => Array
        (
          [0] => 343
          [1] => 405
        )
    )
  [het] => Array
    (
      [1] => Array
        (
          [0] => 195
          [1] => 258
        )
      [2] => Array
        (
          [0] => 420
          [1] => 483
        )
      [3] => Array
        (
          [0] => 0
          [1] => 33
        )
    )
)

na processing moet er dit in je browser verschijnen:

Rob Stenders en Ruud de Wild blijven bij 3FM
Rob Stenders blijft in de ochtend op Radio 3FM. Hij hee...De populaire dj blijft gewoon het middagprogramma Ruuddewild.nl ...an Claudia de Breij tussen 12 en 14 uur te horen met het progra

Noor verwondt zes vrienden op verjaardagsfeest
ongeluk zes gasten beschoten en verwond. Hij trof een vrouw in... anderen raakten lichtgewond. De Noor was erachter gekomen dat ...r struikelde daarna, waardoor het wapen opnieuw af ging. De Noor

Groep gijzelaars in Mali vrijgelaten
Het Duitse tv-station ZDF meldt dat de groep Europese gijzelaars in ...ssen uit Nederland, Duitsland en Zwitserland zouden klaarstaan

deathz0rz 17-08-2003 22:08

PHP-code:

<?php 
define
('DEBUG',true);
include_once((
DEBUG?'../':'')."include/common.php");
include_once((
DEBUG?'../':'')."include/config.php");

header('Content-type: text/plain');

// CACHE WHEN NECESSARY
if (!defined("DONT_CACHE"))
    include_once(
"search_cache.php");

// GET DATA FROM CACHE
mysql_db();
$q="SELECT * FROM `search_cahce` LEFT JOIN `pages` ON `search_cahce`.`id`=`pages`.`id` WHERE `pages`.`active`=1;";
$r=mysql_query($q) or die(mysql_error());
while (
$row=mysql_fetch_object($r)) {
    
$cache[strval($row->ID)]=$row->text;
    
$pgarr[$row->ID]['name']=$row->name;
    
$pgarr[$row->ID]['date']=mktime($row->date);
    
$pgarr[$row->ID]['creator']=$row->creator;
}
unset(
$r);

function 
whole_string($matches) {
    global 
$whole_strings;
    
$whole_strings[]=$matches[1];
    return 
'';
}

function 
split_keys($keys) {
    global 
$whole_strings;
    
$patt='!"(.*)"!iU'// USED TO FIND KEYWORDS.
    
$x=explode(' ',preg_replace_callback($patt,"whole_string",$keys));  // ALSO CHECK FOR 'WHOLE STRING'
    
foreach (($whole_strings?$whole_strings:array()) as $v) {
        
$x[]=$v;
    }
    foreach (
$x as $k => $v) {
        if (!
$v
            unset(
$x[$k]);
    }
    return 
$x;
}

function 
search_key($key,$offset=20) {
    global 
$cache;
    
    
$patt="!\s".preg_quote($key,'!')."\s!i"// USED TO FIND KEYWORD
    
$reslen=($offset*2)+2+strlen($key);      //LENGTH OF THE RESULT
    
    
foreach ($cache as $name => $page) {
        
preg_match_all($patt,$page,$x,PREG_OFFSET_CAPTURE|PREG_PATTERN_ORDER);
        foreach (
$x[0] as $match) {            
            
$offset1=($match[1]-($offset-1)<0?0:$match[1]-($offset-1));
            
$offset2=$offset1+$reslen;
            
$r[$name]=array($offset1,$offset2);
            break;
        }
    }
    return 
$r;
}

$keys=split_keys('en de het');
$keycount=count($keys);
foreach(
$keys as $key) {
    
$search[$key]=search_key($key);
}

print_r($search);
?>


Triloxigen 17-08-2003 22:16

hmm...
waar heb jij queries leren maken :/

deathz0rz 17-08-2003 22:45

Citaat:

McLaren schreef op 17-08-2003 @ 23:16:
hmm...
waar heb jij queries leren maken :/

hoezo?

Citaat:

Bootsman123 schreef op 17-08-2003 @ 23:16:
En waar geleerd dat je nooit spaties hoeft te gebruiken.
:confused:

Citaat:

Bootsman123 schreef op 17-08-2003 @ 23:11:
mysql_db();
$q="SELECT * FROM `search_cahce` LEFT JOIN `pages` ON `search_cahce`.`id`=`pages`.`id` WHERE `pages`.`active`=1;";

Het lijkt mij logisch dat het "search_cache" moet zijn.

eeh ja, maar het werkt wel ;) typo zeg maar

Citaat:

Bootsman123 schreef op 17-08-2003 @ 23:19:
Heb je zelf niet een of ander idee hoe je het Google-like wilt doen? Als eerste ingeving (meestal zijn die heel slecht, maar wel goed voor mezelf om me op weg te helpen) een keyword vinden en dan daarna nog 60 charachters uitprinten, mits de tweede keyword er niet in voorkomt, daarna "..." zetten en dan het tweede keyword vetgedrukt uitprinten, dan weer "..." enz. Zo zou ik het in eerste instantie doen.
maar zo werkt het dus niet, hij gaat eerst met keyword1 alle pagina's af, dan met 2 enz....

Triloxigen 17-08-2003 22:58

Jou query:
Code:

"SELECT * FROM `search_cahce` LEFT JOIN `pages` ON `search_cahce`.`id`=`pages`.`id` WHERE `pages`.`active`=1;"
Mijn versie:
Code:

SELECT * FROM search_cahce LEFT JOIN pages ON search_cahce.id=pages.id WHERE pages.active=1
Maar fijner vind ik (maar weet niet zeker of hetzelfde doet)
Code:

SELECT * FROM pages,search_cahce WHERE search_cahce.id=pages.id && pages.active=1
(ennuh, cahce? niet cache?)

deathz0rz 17-08-2003 23:19

Citaat:

McLaren schreef op 17-08-2003 @ 23:58:
Jou query:
Code:

"SELECT * FROM `search_cahce` LEFT JOIN `pages` ON `search_cahce`.`id`=`pages`.`id` WHERE `pages`.`active`=1;"
Mijn versie:
Code:

SELECT * FROM search_cahce LEFT JOIN pages ON search_cahce.id=pages.id WHERE pages.active=1
Maar fijner vind ik (maar weet niet zeker of hetzelfde doet)
Code:

SELECT * FROM pages,search_cahce WHERE search_cahce.id=pages.id && pages.active=1
(ennuh, cahce? niet cache?)

aha
jij doet het dus zonder `'s, dan krijg je problemen als je fields hebt als 'key' en 'md5' enzo

Triloxigen 18-08-2003 11:26

nee hoor, heb nergens problemen mee :)

Chimera 18-08-2003 12:30

Leg eerst eens gewoon uit wat je uberhaupt wil, niemand gaat dat stuk code uitpluizen om info te krijgen die je ook gewoon op papier kunt zetten.

Chimera 18-08-2003 12:31

Citaat:

McLaren schreef op 18-08-2003 @ 12:26:
nee hoor, heb nergens problemen mee :)
Hoe dan ook, of hij z'n ids tussen quotes zet boeit niet.


Alle tijden zijn GMT +1. Het is nu 23:05.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.