20. juni 2007 - 00:03Der er
17 kommentarer og 1 løsning
tilfældig stykke tekst af stor tekst
Hej eksperter!
Jeg mangler en kode som kan hive en stump tekst ud af en stor tekst. Det hele er i SQL db. Fx så den henter tekst fra et punktum til et andet. Den skal starte/stoppe tekststrengen ved . ! ? men ikke " & ( ) - ,
Så hvis man har flere artikler i db, kan man på forsiden se en sætning fra en eller anden artikel. Er den for svær?
Hmm... jakobdo -> Jeg kan ikke bruge din metode, da de første 20 tegn jo kan være en halv sætning og det skal være en hel.
zurekk -> Det var en måde at gøre det på. Men hvad så der hvor en sætning ender med ! eller ? ?
Og hvis det er alle den udskriver er det heller ikke så godt. Det skal bare være en tilfældig, eller tre.
Jeg har tænkt lidt på om man kunne lave det så jeg laver et nyt dokument og tilføjer til dokumentet, hver gang man gemmer en artikel. Det nye dokument, som enten kunne være i db eller .txt kunne så indeholde præcis den samme artikel, og alle de andre artikler, men med et linjeskift for hver punktum og så kan man bare kalde tilfældige linjer?
Jeg kender ikke koden, men jeg tror jeg kan se hvor du vil hen med den og det er måske også den rigtige vej. Den virker bare ikke... Der sker ikke noget. Hvad kan der være galt?
<html> <head> </head> <body> <? <!-- forbindelse til MySQL db -->
Nu er vi vist tæt på. Jeg har: <html> <head> </head> <? $tekst = 'Sætning nummer 1. Sætning nummer 2! Sætning nummer 3?'; if(preg_match_all('/\b(.+?)(\.|\?|\!)/', $tekst, $result)) { $count = count($result[0]); $rand = rand(0,($count-1)); echo "$result[0][$rand]"; } ?> </body> </html>
Men det den smidder ud er "array[0]", "array[1]" eller "array[2]". Jeg er ikke den skarpeste til arrays, så hvordan får jeg lavet det om til at den skriver "sætning nummer 1" osv? Nu har jeg jo min $tekst i SQL db, men der er mange $tekster. Kan jeg på en måde sige $tekst = $tekst1 + $tekst2 + $tekst3... ?
Tilføj et s i denne linie: if(preg_match_all('/\b(.+?)(\.|\?|\!)/', $tekst, $result)) så det bliver: if(preg_match_all('/\b(.+?)(\.|\?|\!)/s', $tekst, $result))
Det virker. Men den tager kun eksempler fra en tekst. Ikke fra alle... er der en logisk forklaring på det? Kan det hjælpe hvis jeg siger alle tekster har fået tildelt et nummer som i $id ?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.