Oprettet ons. d. 24. oktober 2012 kl. 21:56:48

labisama
labisama (22.324 point. Point ude: 0)

Udskift tegn med mysql-udtræk

Hej med jer

Jeg vil høre om følgende er muligt, eller hvordan I ville lave det.

Ideen er at have to tabeller hhv. "Dokumenter" og "Tekster".

I et af dokumenter indeholder:

"Dette er noget tekst bla. bla... osv...
[text:1]
Noget mere tekst..."

Her kunne jeg godt tænke mig en funktion/opbygning i hvordan [text:1] kan udskiftes med id = 1 fra tabellen "tekster".

Jeg har kigget lidt på str_replace, men umiddelbart er det jo "bare" en streng den udskifter med en anden. Jeg vil helst gerne undgå at indlæse alle tekster fra "Tekster"-tabellen.

Håber det var forståeligt, og en der kan give mig et godt hint til at få det løst.

Skrevet ons. d. 24. oktober 2012 kl. 21:59:22| #1

labisama
labisama (22.324 point)
Jeg mangler måske lige at have forklaret at [text:1] så bliver udskiftes med indholdet fra tekster med id=1. Dette kunne fx. være:

"Tekst inde fra test sdgdsgsd og kan blive rettet og opdateret i tabellen..."

Dermed bliver dokumentets tekst så:

"Dette er noget tekst bla. bla... osv...
Tekst inde fra test sdgdsgsd og kan blive rettet og opdateret i tabellen...
Noget mere tekst..."

Skrevet ons. d. 24. oktober 2012 kl. 22:14:29| #2

olebole
olebole (216.738 point)
<ole>

Det er strtr, du skal have fat i.

"men umiddelbart er det jo "bare" en streng den udskifter med en anden. Jeg vil helst gerne undgå at indlæse alle tekster fra "Tekster"-tabellen." >> Så må du først finde alle de forskellige [text:n] i dokumentstrengen og hente de tilsvarende rækker i databasen. Derefter bygger du dit array til strtr, hvorefter du kører funktionen på dokumentstrengen

/mvh
</bole>

Skrevet fre. d. 26. oktober 2012 kl. 18:49:09| #3

labisama
labisama (22.324 point)
Tak for dit svar, Ole.

Det giver rigtig god mening (nu).

Kan du forklare hvad forskellen ligger i str_replace og strtr? Synes funktionerne minder meget om hinanden.

Skrevet fre. d. 26. oktober 2012 kl. 20:28:20| #4

olebole
olebole (216.738 point)
str_replace er en generel søg/erstat funktion, som kan mange forskellige ting.

strtr er en decideret oversætter funktion (strtr = string_translate). Den kan i modsætning til str_replace modtage en streng og ét associativt array. Det associative array gør ofte funktionen lettere at arbejde med:

Den bruges f.eks. også tit, når tegn skal skiftes til smiley-billeder:

$aReplace(
    ':)' => '<img src="smile.png">',
    ':(' => '<img src="frown.png">',
    ':,|' => '<img src="cry.png">'
);
$newString = strtr($sString, $aReplace);

Med str_replace skal du have to arrays. Ét til strengene/tegnene, der skal søges efter - og ét til erstatningerne. Det er ofte mere bøvlet at arbejde med

Skrevet fre. d. 26. oktober 2012 kl. 23:05:32| #5

labisama
labisama (22.324 point)
Tak for en god forklaring.

Ang. at finde og udtrække fx. [Text:1] i en lang streng/tekst. Hvilken funktion ville du anbefale til dette formål?

Du må godt skrive det som et svar :)

Skrevet lør. d. 27. oktober 2012 kl. 00:14:15| #6

olebole
olebole (216.738 point)
Hvis du tester denne kode, vil du se, at tallene ligger i $matches[1]:

$text = 'Lorem ipsum dolor sit amet, [text:1] consectetur adipiscing elit. Aliquam vel dui velit [text:2]. Aliquam dictum, nibh blandit commodo [text:3] volutpat, augue diam ornare ligula [text:2], ac pharetra tortor lacus sed purus. Fusce [text:4] ullamcorper, dolor in molestie [text:1] ornare, felis ante luctus erat, et porttitor [text:5] augue dolor viverra dui.';

preg_match_all('/\[text:(\d+)\]/', $text, $matches);

var_dump($matches);

Som du kan se, har jeg brugt nogle tekster flere gange, hvilket naturligvis afspejles i array'et af tal. Hvis du lige før, du dumper array'et til browseren, indsætter linjen:

$matches = array_unique($matches[1]);

- fjernes gengangere, og $matches overskrives med $matches[1], så array'et nu kun indeholder tallene.

Jeg har ikke helt styr på, hvad du præcist laver, men mon ikke 'Lorem ipsum' teksten fra eksemplet skal hentes langt oftere, end det skal gemmes? I så fald ville det nok være smartest at gemme tallene i et ekstra felt, når teksten gemmes. Så parser du kun teksten én gang - i stedet for hvergang den hentes/læses.

I virkeligheden ville jeg nok gøre noget helt tredie  =)

Jeg ville have 'Lorem ipsum' teksten i én tabel, knyttet sammen med en id, txt_id. Indsætningsteksterne ville jeg lægge i en anden tabel med en id repl_id. En tredie tabel skulle så indeholde to felter txt_id og repl_id.

Når en 'Lorem ipsum' tekst uploades - evt. sammen med nogle tekster til udskiftning/indsættelse - oprettes samtidig en række i tabellen med de to ID'er for hver [text:n], der måtte være i teksten. Tallet n kunne passende være udskiftningstekstens txt_id i DB'en.

Når du har hentet 'Lorem ipsum' teksten, vil du så kunne lave en joined SELECT mod tabellen med de to ID'er og tabellen med udskiftningstekster - og hente dem i ét hug. Derved ville du udnytte MySQL som relational DB. Men så er vi vist henne i noget lidt andet. Du kan jo tænke lidt over det - søge lidt - og/eller åbne en ny tråd, hvis der opstår specifikke spørgsmål  *o)

Ellers tak, jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)

Skrevet lør. d. 27. oktober 2012 kl. 00:19:02| #7

olebole
olebole (216.738 point)
Ups, det var vist meningsforstyrrende:

"Når en 'Lorem ipsum' tekst uploades - evt. sammen med nogle tekster til udskiftning/indsættelse - oprettes samtidig en række i tabellen med de to ID'er for hver [text:n], der måtte være i teksten. Tallet n kunne passende være udskiftningstekstens repl_id i DB'en."  =)

Skrevet søn. d. 28. oktober 2012 kl. 22:03:09| #8

labisama
labisama (22.324 point)
Tusind tak for hjælpen og dine gode inputs.

Jeg prøver at lege videre med funktionerne og de nye indspark du har givet.

Skrevet søn. d. 28. oktober 2012 kl. 23:25:49| #9

olebole
olebole (216.738 point)
Selvtak  =)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

ZF2 Entity was not found

Oprettet den 23. maj 2013 kl. 12.51
zorkmontana giver 60 point for svar | Giv et svar »

hjælp til php / mysql

Oprettet den 23. maj 2013 kl. 10.54
AOT1977 giver 30 point for svar | Giv et svar »

Hjælp til database kolonne

Oprettet den 22. maj 2013 kl. 17.44
StotheT giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Her gemmer de hemmelige kopier af dine data sig

Hvad sker der, hvis din Mac bryder sammen og du ikke har taget backup? Fortvivl ikke. Der er gode chancer for, at der rundt omkring alligevel ligger sikkerhedskopier af dine data.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Snart kan du printe din egen pizza

Inden længe kan det blive muligt at printe pizzaer og andre fødevarer.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger