Behandling af strenge

Slicing

Ved hjælp af slicing kan man opdele tekststrenge i mindre stykker. For at "slice" tekststykket anvender vi substr()

substr(*streng*,*start*,*antal tegn*)

Vi skal altså angive hvad der skal slices i, hvor det skal starte og til sidst hvor mange tegn.

Hvis man ikke angiver start- eller slutpositionen, så sættes den automatisk til første og sidste tegn . Lad os prøve med at slice i en simpel mail: hansboedker@dkmail.dk.

Når man slicer skal man fortælle start og slutpositionen. Når man gør det skal man huske på, at computerens første værdi er 0. Det betyder følgende:

h a n s b o e d k e r @ d k m a i l . d k
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Vi kan altså angive værdien både fra venstre side med den positive værdi og fra højre med den negative værdi. Her er nogle eksempler:

Først slicer mailnavnet ud:


<?php
$mail = "hansboedker@dkmail.dk";
echo substr($mail,0,11);
?>

hansboedker

Her slicer vi landekoden ud på to forskellige måder. Læg mærke til, at hvis man kører helt til enden kan man nøjes med hvorfra man slicer. Man vælger også selv om man vil beskrive ved hjælp af de positive eller negative værdier:


<?php
$mail = "hansboedker@dkmail.dk";
echo substr($mail,19)."\n";
echo substr($mail,-2);
?>

dk
dk

Her slicer vi domænenavnet (dkmail) ud på forskellige måder:


<?php
$mail = "hansboedker@dkmail.dk";
echo substr($mail,12,6)."\n";
echo substr($mail,-9,6);
?>

dkmail
dkmail

Strenglængde

strlen()finder længden på en streng.


<?php
echo strlen("hansboedker@dkmail.dk")."\n";
echo strlen("Thomas");
?>

21
6

Tæl tilfælde

For at tælle antallet en et bogstav eller en kombination forekommer anvendes substr_count()


<?php
echo substr_count("hansboedker@dkmail.dk","dk");
echo substr_count("hansboedker@dkmail.dk","@");
?>

3
1

Hvor er ...

For at finde ud af hvor en tekststreng er anvender man strpos().

Herunder vil vi gerne adskille


<?php
$navn = "Thomas Jensen";
echo strpos($navn," ");
?>

6

Med den information kan vi adskille for- og efternavn fra hinanden. For kender vi positionen på mellemrummet ved vi også hvor fornavn slutter og efternavn begynder:


<?php
$navn = "Thomas Jensen";
$mellemrum = strpos($navn," ");

echo "Mellemrummet er på position: $mellemrum\n";

echo "Fornavn:\t".substr($navn,0,$mellemrum)."\n";
echo "Efternavn:\t".substr($navn,$mellemrum+1);
?>

Mellemrummet er på position: 6
Fornavn:	Thomas
Efternavn:	Jensen

Find flere

Hvad så med mellemnavne, f.eks. Thomas Georg Jensen? Her skal vi udnytte at strpos() har en ekstra parameter - hvor man kan sige hvorfra den skal finde mellemrummet.

Vi ved fra før at første mellemrum er ved den 6 position og af nedestående skema kan vi se at det næste mellemrum kommer på position 12

T h o m a s G e o r g J e n s e n
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
-19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Herunder er lavet en kode til at finde antallet af mellemrum i en tekststreng, og lægge dem ind i et array. Ved at gøre det kan vi bagefter kalde vores array til at udskrive og/eller gemme de enkelte ord hver for sig.


<?php
// Laver en variabel til det navn der skal testes
$navn = "Thomas Georg Jensen";

// Opretter et array til mellemrumspositioner
$mellemrum = array();

// Tæller antallet af mellemrum
$antal_mellemrum = substr_count($navn," ");

// Påretter en variabel, så vi kan tælle fra 0'te position
$position = 0;

// Opretter løkke, så vi kan finde alle de mellemrum der er
for($i=0;$i<$antal_mellemrum;$i++){
	// Finder positionen af mellemrummet efter positionsværdien
	$mellemrum_pos = strpos($navn," ",$position);
	// Indsætter mellemrummets position i vores array
	$mellemrum []=  $mellemrum_pos;
	// Lægger en til positionen, så vi kan finde næste position
	$position = $mellemrum_pos+1;
	
	}

// Udskriver antallet af mellemrum
echo "Antal Mellemrum: $antal_mellemrum\n";

//Udskriver vores array
print_r($mellemrum);
?>

Antal Mellemrum: 2
Array
(
    [0] => 6
    [1] => 12
)

Med dette program som grundstamme kan vi reelt set analysere en tekst, da vi kan lægget hvert ord ind i et array

.

Sjove funktioner

Bakke snagvendt

For at udskrive en streng baglæns anvendes strrev()


<?php
echo strrev("omvendt");
echo strrev("baglæns");
?>

tdnevmo
sn��lgab

Læg mærke til at strrev() ikke kan arbejde med de danske tegn æ, ø og å.

Shuffle

str_shuffle() sætter alle bogstaverne i en vilkårlig rækkefølge.


<?php
echo str_shuffle("omvendt");
echo str_shuffle("baglæns");
?>

eotmndv
lnsa�gb�

Ligesom strrev() har str_shuffle svært ved at anvende æøå. Her sker der dog det mystiske engang imellem, at det faktisk virker.