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 =)