Gå til innhold

Dele streng x ved forekomst av tegn y nummer z


Anbefalte innlegg

Jeg har en lang tekststreng (feks en artikkel), som jeg skal generere en ingress av. Ingress er pr def i dette tilfelle de fem første setningene. Hvordan kan jeg dele streng x ved forekomst av tegn punktum nummer 5?

 

Jeg har klart det med å eksplodere strengen, men løsningen min er lite elegant og jeg har lyst å lage den bedre.

 

Dette har jeg så langt.

 

public function get_ingress(){
	$this->content = strip_tags($this->content);
	$lines = explode('.', $this->content);

	for($i=0; $i<5; $i++){
		$ingress .= $lines[$i]. ". ";
	}
	return $ingress;
}

 

Jeg forsøkte meg med preg_match_all, men den hentet bare ut alle punktumene, så det var ubrukelig. Jeg innbiller meg at regex er min venn i dette tilfelle, men kan ikke nok. Noen forslag for hvilken funksjon jeg kan titte på? eller forslag til hvordan gjøre min funksjon vakker?

Lenke til kommentar
Videoannonse
Annonse

Du kan gjøre slik som du gjør, men før du legger setningen i $ingress sjekker du om den starter på en stor bokstav. Da vil ikke forkortelser (blabla dvs. ja) komme med. Noe mer nøyaktig måte kommer jeg dessverre ikke på akkurat nå.

Endret av loathsome
Lenke til kommentar

Flere måter her:

 

1.

explode på punktum

array_slice for å hente 5 første fra arrayet

implode for å sette sammen de fem første igjen

 

2.

sett x til 0

loop n(5) ganger med strpos

bruk x = strpos( . , x+1 )

NB! strpos kan returnere false, så du må passe på verdien til x (bruk tmp som du sjekker at ikke er false før du setter x til tmp)

når loopen er ferdig vil du ha posisjonen til det n-te punktumet.

Lenke til kommentar
Hva om en setning er slik da, Peter: "Dette er en setning, dvs. ikke en fugl"?

Jeg ser absolutt problemet, og innrømmer at jeg ikke tenkte på det da jeg forseslo de forrige algoritmene, men jeg svarte på spørsmålet hennes :)

Uansett tror jeg ikke det er et stort problem om man får fire istedenfor fem linjer.

 

Personlig pleier jeg å lage ingress basert på n antall linjeskift. (Gjerne ett dersom det er folk som skriver korrekt)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...