[php] str_replace van array naar string + orgineel

Pagina: 1
Acties:

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
Ik heb net in de search zittn zoeken en op php.net maar ik kan een bepaalde functie niet helemaal voor elkaar krijgen

ik moet in een string meerdere woorden vervangen voor links, deze woorden staan in een database opgeslagen en de link moet als knopje de oude tekst krijgen en een id wat uit de database komt.

ik heb zelf al wat lopen klooien maar ik loop vast.
stel dus dat ik dit doe:

ik bouw een array op waarin alle woorden en id's staan (nog geen idee hoe maar oke)
$string=str_replace($words[],"<a href=help.php?id=".$words[id].">".$words[word]."</a>",$string);

kortom je hebt bijvoorbeeld de text:

ik ben een stukje tekst met een uitleg

en ik wil dan bijvoorbeeld "uitleg" vervangen door een link met id 1 omdat id 1 en uitleg in de database staan.

weet iemand een oplossing, en ja ik weet t de code hierboven is klote :P
alvast bedankt

openkat.nl al gezien?


  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

PHP:
1
<?while ($words = sql_fetch_array($result)){    $string = str_replace($words['word'], '<a href="help.php?id=' . $words['id'] .'">'. $words['word'] . '</a>', $string);}?>

On track


Verwijderd

ksnap der toch nix van....... :(

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Op zondag 05 mei 2002 16:24 schreef Chrisje18 het volgende:
ksnap der toch nix van....... :(
Jij bent de vriendin van killercow ofzoow?

On track


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
:? niet voor zover ik weet
beetje loze post imho

anyway, is een while loop echt een oplossing of niet, want dan moet je alsnog heel erg vaak die str_replace aanroepen terwijl het mischien ook in een keer kan.

openkat.nl al gezien?


  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Dan heb je twee verschillende array's nodig.. een met de woorden en een met de id's..
PHP:
1
<?$string = str_replace($words, '<a href="help.php?id=' . $ids . '">' . $words . '</a>', $string);?>

Maar ik heb het vermoeden dat ie dan die laatse '$words' niet goed pakt...

On track


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 05 mei 2002 16:30 schreef killercow het volgende:
anyway, is een while loop echt een oplossing of niet, want dan moet je alsnog heel erg vaak die str_replace aanroepen terwijl het mischien ook in een keer kan.
Hoe denk je dat str_replace intern werkt? ;)
Magoed, dat zal alsnog (slechts) ietsje efficienter zijn dan gewoon zelf dmv een whileloop.
Op zondag 05 mei 2002 16:24 schreef Chrisje18 het volgende:
ksnap der toch nix van....... :(
en als jij es de faq's gaat lezen enzo. Dit soort loze posts hebben niet zoveel nut natuurlijk :)

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
jah maar FUCK dan moet ik vet vaak een text scannen op bepaalde woorden als ik een dikke vette dbase heb , bwah das niet goe!

hmm naja eerst maar eens proberen, grr. daarna waarschijnlijk terug naar de tekentafel :P

iemand nog coole flitsende performance brengende tips? Please? wat ik heb een gevoel dat dit niet zo handig gaat worden.

openkat.nl al gezien?


Verwijderd

na die str_replace de tekst opslaan met een datum, hoef je het niet nog een keer doen.

als dan de database met je woorden gewijzigd is dan update je je tekst weer met alle woorden die nieuwer zijn dan datum behorende bij laatste save.

soort van cachen dus:)

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
hmm tjah dat zou idd kunnen, naja hopen dat het werkt, alleen zou jouw oplossing er voor zorgen dat bij een change alle strings weer doorgelopen moeten worden omdat ze allemaal ouder zijn.

[edit]

en dan nog iets
stel nou dat ik ook hoofdletter ongevoelig wil zoeken maar dat het terug geplaatste woord het zelfde zou moeten zijn als het orgineel (dus niet uit de database afkomstig)
dit ivm woorden aan het begin van een zin enzo.

openkat.nl al gezien?


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
je kan toch zoeken met eregi. Je zoekt hoofdlettergevoelig maar je krijgt het woord wel in "oorspronkelijke staat" terug (dus met eventuele hoofdletters).

  • Stewie!
  • Registratie: September 2001
  • Laatst online: 22:05

Stewie!

Keen must die!

Op zondag 05 mei 2002 16:26 schreef WouZz het volgende:

[..]

Jij bent de vriendin van killercow ofzoow?
nee, mijn vriendin O+ :*


Strava: https://www.strava.com/athletes/149347154


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Hmz n00b alert!
Als je nou eerst eens in php met haar gaat praten, kan je later shutdown utilities installen enzo. Ben momenteel ook bezig mijn vriendin te formatteren.

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Als ik zo je uitleg lees ben je volgens mij op zoek naar de functie preg_replace. Dan doe je gewoon dit:
code:
1
2
3
4
5
6
7
8
9
$search = array ("foo",
             "bar",
             "baz");

$replace = array ("<a href="uitleg.php?w=foo">foo</a>",
            "<a href="uileg.php?w=bar">bar</a>",
            "<a href="uileg.php?w=baz">baz</a>");

$text = preg_replace($search, $replace, $text);

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Op maandag 06 mei 2002 01:06 schreef 2 het volgende:
Als ik zo je uitleg lees ben je volgens mij op zoek naar de functie preg_replace. Dan doe je gewoon dit:
code:
1
...
str_replace doet voor deze replaces precies hetzelfde, maar is een stuk sneller.. Het voordeel van preg_replace is echter wel weer dat je case-insensitive kan zoeken..

Maar de topicstarter heeft als ik het goed begrijp een 'help' tabel in z'n database met o.a. de velden 'id', 'word', en 'uitleg' ofzoow... Nu wil hij z'n tekst dus scannen op woorden die in die tabel voorkomen en vervangen met een link naar help.php met het bijbehorende id. Nadeel is alleen dat de tekst dus voor ieder woord helemaal 'gescand' moet worden.. En bovendien moet je, wil je preg/str_replace met arrays aanroepen, twee aparte arrays hebben.. Dus een met de id's en een met de word's.. Dus dat is ook weer een stap/query extra..

On track


  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Maar met preg_replace is juist zo handig omdat je dan makkelijk alles in arrays kan dumpen.
PHP:
1
<?$result = mysql_query("SELECT id, woord FROM help_woorden");while($row=mysql_fetch_array($result)) {  $search[] = $row["woord"];  $replace[] = "<a href=\"uitleg.php?id=" . $row["id"] . "\">". $row["woord"] . "</a>";}?>

Overigens kun je volgens mij nog beter het woord zelf als unieke key gebruiken, dan wordt het nog eenvoudiger.

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Op maandag 06 mei 2002 14:09 schreef 2 het volgende:
Maar met preg_replace is juist zo handig omdat je dan makkelijk alles in arrays kan dumpen.
Dat kan str_replace ook:
In PHP 4.0.5 and later, every parameter to str_replace() can be an array.

If subject is an array, then the search and replace is performed with every entry of subject, and the return value is an array as well.

If search and replace are arrays, then str_replace() takes a value from each array and uses them to do search and replace on subject. If replace has fewer values than search, then an empty string is used for the rest of replacement values. If search is an array and replace is a string; then this replacement string is used for every value of search.

On track


  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Hm ok :)

Maar dan wel wat je zelf al zei; preg_replace kan ook case insensitive, als woorden bijvoorbeeld aan het begin van een zin staan is dat wel handig.

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Inderdaad, maar wel langzamer, dus dat is de afweging die de topistarter zou moeten maken..

On track


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
jah oke , maar hoe krijg ik het dan voor elkaar dat het woord niet vervangen wordt maar eigenlijk alleen omgeven wordt door de link? want anders raak ik me hoofdletters enzo kwijt.

openkat.nl al gezien?

Pagina: 1