Avaleht
uus teema   vasta Tarkvara »  WWW »  Abi vaja PHPs. märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Stemugram
HV kasutaja

liitunud: 02.12.2001




sõnum 28.07.2012 02:17:44 Abi vaja PHPs. vasta tsitaadiga

Mul on siin kood, mis teeb otsingusõna boldiks.
Sellest tuleb Fulltext otsing.
Et täpset fraasi otsida tuleks otsingusse kirjutada sõnade vahele alakriips "_".
Andmebaasis on sõnad ilma alakriipsuta.
All järgnevat koodi oleks vaja muuta nii, et kui otsin näiteks fraasi "poeg_Jaan" siis tehakse leitud vastuses boldiks täpne fraas "poeg Jaan".


<?php
function highlight($c,$q){

$q=explode(' ',str_replace(array('+','','\\','+','*','?','[','^',']','$','(',')','{','}','=','!','<','>','|',':','#','-',''),'',$q));
for($i=0;$i<sizeOf($q);$i++)
  $c=preg_replace("/($q[$i])(?![^<]*>)/i","<b>\${1}</b>",$c);
   $isikud = explode(";", $c);
   $a=1;
   for($i=0; $i<count($isikud); ++$i){
        echo $a++ .". $isikud[$i]<br>\n";
         }
   }


$c="Silla Jaan, naine Leena; poeg Jaan, naine Mari; poeg Tõnu; tüdruk Leno";
$q="poeg_Jaan";
highlight($c, $q);
?>
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
Lordlesta
Kreisi kasutaja

liitunud: 05.07.2005



Autoriseeritud ID-kaardiga

sõnum 28.07.2012 06:35:54 vasta tsitaadiga

php:
  1. function highlight($c, $q) {
  2.         $q = explode(' ',str_replace(array('+','','\\','+','*','?','[','^',']','$','(',')','{','}','=','!','<','>','|',':','#','-',''), '', $q));
  3.         for($i=0;$i<sizeOf($q);$i++) {
  4.                 $c = preg_replace("/($q[$i])(?![^<]*>)/i","<b>\${1}</b>", $c);
  5.                 $isikud = explode(";", $c);
  6.                 $a=1;
  7.                 for($i2=0; $i2<count($isikud); ++$i2) {
  8.                         $q2 = str_replace("_", " ", $q[$i]);
  9.                         $result = preg_replace("/".$q2."/i", "<strong>".$q2."</strong>", $isikud[$i2]);
  10.                         echo $a++ .". ".$result."<br>\n";
  11.                 }
  12.         }
  13. }
  14.  
  15.  
  16. $c = "Silla Jaan, naine Leena; poeg Jaan, naine Mari; poeg Tõnu; tüdruk Leno";
  17. $q = "poeg_Jaan";
  18.  
  19. highlight($c, $q);
Kommentaarid: 31 loe/lisa Kasutajad arvavad:  :: 2 :: 0 :: 27
tagasi üles
vaata kasutaja infot saada privaatsõnum
Stemugram
HV kasutaja

liitunud: 02.12.2001




sõnum 28.07.2012 10:06:11 vasta tsitaadiga

Peaaegu juba see sobiks, aga kui kirjutada otsingusse "poeg_Jaan Mari", siis peaks see tegema boldiks kolm sõna "poeg" "Jaan" "Mari".
Praegu aga annab ta kaks vastust kus ühes on bold "poeg Jaan" ning teises "Mari".
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
tiitise
HV kasutaja

liitunud: 04.03.2005



Autoriseeritud ID-kaardiga

sõnum 28.07.2012 11:03:40 vasta tsitaadiga

Stemugram kirjutas:
Peaaegu juba see sobiks, aga kui kirjutada otsingusse "poeg_Jaan Mari", siis peaks see tegema boldiks kolm sõna "poeg" "Jaan" "Mari".
Praegu aga annab ta kaks vastust kus ühes on bold "poeg Jaan" ning teises "Mari".

Põhimõtteliselt teeb järgnev asi seda, mida kirjeldasid:
php:
  1. <?php
  2. $c = "Silla Jaan, naine Leena; poeg Jaan, naine Mari; poeg Tõnu; tüdruk Leno";
  3. $q = "poeg_Jaan mari";
  4. function highlight($c, $q) {
  5. $q = explode(' ',str_replace(array('+','','\\','+','*','?','[','^',']','$','(',')','{','}','=','!','<','>','|',':','#','-',''), '', $q));
  6. foreach ($q AS $isik){
  7.         $isik=str_replace("_"," ",$isik);
  8.         $c= preg_replace("/$isik/i","<strong>$isik</strong>",$c);
  9. }
  10. return $c;
  11. }
  12. ?>
  13.  


viimati muutis tiitise 28.07.2012 11:06:01, muudetud 2 korda
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 6
tagasi üles
vaata kasutaja infot saada privaatsõnum
19Mart94
HV kasutaja

liitunud: 22.06.2010



Autoriseeritud ID-kaardiga

sõnum 28.07.2012 11:06:22 vasta tsitaadiga

Mina lahendaksin selle koodi nii:
php:
  1.  
  2. <?php
  3.  
  4. function highlight($c, $q){
  5.         $q = preg_replace("/[^a-zA-ZöäüõÖÄÜÕ\-0-9_\s]/", "", $q);
  6.         $otsisonad = explode(" ", $q);
  7.         foreach($otsisonad as $value) {
  8.                 if(strpos($value, "_")) {
  9.                         $tap_otsisonad = str_ireplace("_", " ", $value);
  10.                         $c = str_ireplace($tap_otsisonad, "<b>".$tap_otsisonad."</b>", $c);
  11.                 } else {
  12.                         $c = str_ireplace($value, "<b>".$value."</b>", $c);
  13.                 }
  14.         }
  15.        
  16.         echo $c."<br />";
  17. }
  18.  
  19.  
  20. $c = "Silla Jaan, naine Leena; poeg Jaan, naine Mari; poeg Tõnu; tüdruk Leno; Anna-Mari";
  21. $q = "Silla poeg_Jaan Anna-mari Anna_Mari naine";
  22. highlight($c, $q);
  23.  
  24. ?>
  25.  

See ei kuva listi nii, nagu sul, kuid vast saad siit idee kätte icon_smile.gif (Funktsiooni vastuse võid vabalt eraldada ; abil ja siis nimekirja koostada)
Kommentaarid: 33 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 31
tagasi üles
vaata kasutaja infot saada privaatsõnum
Stemugram
HV kasutaja

liitunud: 02.12.2001




sõnum 28.07.2012 12:16:16 vasta tsitaadiga

Tänud!
Paistab, et töötab nii nagu vaja.

Kuigi üks pisiviga on veel. Nimelt kui otsingusse kirjutad nimed väiketähtedega siis vastuses kuvatakse ka need nimed väiketähtedega.
Kuidas saaks, et nimed algaksid ikka suure tähega nagu ka andmebaasis nad on?
ucwords() ka ei aita kuna see ei tea millised sõnad on nimed ja millised mitte.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
19Mart94
HV kasutaja

liitunud: 22.06.2010



Autoriseeritud ID-kaardiga

sõnum 28.07.2012 13:57:54 vasta tsitaadiga

Stemugram kirjutas:
Tänud!
Paistab, et töötab nii nagu vaja.

Kuigi üks pisiviga on veel. Nimelt kui otsingusse kirjutad nimed väiketähtedega siis vastuses kuvatakse ka need nimed väiketähtedega.
Kuidas saaks, et nimed algaksid ikka suure tähega nagu ka andmebaasis nad on?
ucwords() ka ei aita kuna see ei tea millised sõnad on nimed ja millised mitte.

php:
  1. <?php
  2.  
  3. function highlight($c, $q){
  4.         $q = preg_replace("/[^a-zA-ZöäüõÖÄÜÕ\-0-9_\s]/", "", $q);
  5.         $otsisonad = explode(" ", $q);
  6.         foreach($otsisonad as $value) {
  7.                 $value = str_ireplace("_", " ", $value);
  8.                 $c = preg_replace("/(".$value.")(?![^<]*>)/i","<b>\${1}</b>",$c);
  9.         }
  10.        
  11.         $nimed = explode(";", $c);
  12.         $i = 1;
  13.         $result = "";
  14.         foreach($nimed as $nimi) {
  15.                 $result .= $i.". ".$nimi."<br />";
  16.                 $i++;
  17.         }
  18.        
  19.         return $result;
  20. }
  21.  
  22.  
  23. $c = "Silla Jaan, naine Leena; poeg Jaan, naine Mari; poeg Tõnu; tüdruk Leno; Anna-Mari";
  24. $q = "Silla poeg_jaan anna-mari Anna_Mari naine";
  25. echo highlight($c, $q);
  26. ?>

Tõmbasin koodi kokkupoole ning kasutasin su esialgsest koodist ka ühte rida thumbs_up.gif
Kommentaarid: 33 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 31
tagasi üles
vaata kasutaja infot saada privaatsõnum
Stemugram
HV kasutaja

liitunud: 02.12.2001




sõnum 28.07.2012 14:33:34 vasta tsitaadiga

Tänud!

Nüüd on kõik OK thumbs_up.gif
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  Abi vaja PHPs.
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.