In dit deel zullen we wat dieper ingaan op het gebruik van strings en het opmaken van tekst.
Net zoals we het aantal elementen in een array kunnen bepalen, kunnen we met een eenvoudige functie, strlen(), het aantal karakters in een string bepalen:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Functies</title>
</head>
<body>
<?php $tekst = "Deze tekst is opgeslagen in een string."; ?>
<p>De zin "<?php print $tekst; ?>" bevat <?php print strlen($tekst); ?> tekens.</p>
</body>
</html>
Deze functies, die identiek zijn aan die in C, zorgen er voor dat tekst met een mooiere opmaak kunnen weergegeven worden.
Het verschil tussen de 2 is dat printf() de uitvoer onmiddellijk afdrukt, zoals het geval is bij de print(), en dat sprintf() een string oplevert, die verder kan gebruikt worden. Voorbeeld:
<?php $vierkantswortel = sqrt(2); ?>
<p>De vierkantswortel van 2 is <?php printf("%.2f", $vierkantswortel); ?>.</p>
De "%.2f" zorgt ervoor dat de variabele, die erna opgeroepen wordt, afgerond wordt op 2 decimalen.
De omzetting begint altijd met een "%", gevolgd door een aantal parameters die de opmaak zullen bepalen, deze parameters zijn optioneel:
Naam | Omschrijving | Voorbeeld |
---|---|---|
Sign specifier | Geeft aan of er ook voor positieve getallen een teken moet worden afgedrukt, gebruik hiervoor een +. | printf("resultaat: %+.2f\n", $var); //resultaat: +3.14 |
Padding specifier | Geeft weer welk soort karakter er moet gebruikt worden voor het uitlijnen van een waarde, dit kan een spatie (standaard) of een 0 (nul) zijn. De eventuele padding specifier laat je voorafgaan door een enkele aanhalingsteken ('), enkel van belang als ook de width specifier is opgegeven. | printf("resultaat: %'010.2f\n", $var); //resultaat: 0000003.14 |
Width specifier | Een getal voor het punt duidt het aantal karakters aan dat minimum zal gebruikt worden voor het weergeven van het getal. Als er minder karakters zijn om weergegeven te worden, wordt het getal rechts uitgelijnd en verder opgevuld met spaties ervoor (of wat er opgegeven is in de padding specifier). De precisie wordt ook meegeteld in de width specifier. | printf("resultaat: %'010.2f\n", $var); //resultaat: 0000003.14 |
Precision specifier | Een getal na het punt duidt de precisie aan. Kan enkel gebruikt worden bij floats. Bij strings: geeft het getal nĂ¡ de punt het maximaal weer te geven karakters aan. | |
Type specifier | Deze geeft aan als welk type de variabele moet weergegeven worden. Zie onderstaande tabel. |
Type | Omschrijving |
---|---|
%% | Weergeven van een % |
%b | Integer opgemaakt als binair getal |
%c | Integer opgemaakt als ASCII-karakter |
%d | Integer opgemaakt als signed decimaal getal |
%u | Integer opgemaakt als unsigned decimaal getal |
%o | Integer opgemaakt als octaal getal |
%x of %X | Integer opgemaakt als hexadecimaal getal met kleine letters of met hoofdletters |
%f | Floating point getal |
%s | String |
Het zal ook duidelijk zijn dat je enkel decimalen kunt gebruiken als je met kommagetallen te maken hebt. Een paar voorbeelden:
<p><?php
printf("Pi is gelijk aan %f,<br />", 3.14159);
printf("en afgerond: %.2f,<br />", 3.14159);
printf("met 10 cijfers na de komma: %.10f.<br />", 3.14159);
printf("%.15s<br />", "Toont slechts een stukje van deze regel.");
printf("Binair: %b, decimaal: %d en kommagetal: %f.<br />", 123, 123, 123);
printf("De BTW bedraagt %d%% (%.2f Euro).", 21, 126.3554);
?></p>
Om de eerste n karakters van een string weer te geven, gebruik je "%.ns", waarbij n het aantal karakters is, dat je wilt weergeven.
Deze functies worden in de eerste plaats gebruikt om opmaak met cijfers mee te geven, zonder dat de inhoud ervan verloren gaat.
Er zijn 4 functies ter beschikking die we kunnen gebruiken om met hoofdletters te spelen:
<p>Spelen met hoofdletters:<br />
<?php $tekst = "The Fantastic Four: HTML, CSS, JavaScript en PHP.";
print strtolower ($tekst) . "<br />";
print strtoupper ($tekst) . "<br />";
print ucfirst ($tekst) . "<br />";
print ucwords ($tekst);
?></p>
Terwijl we integers heel eenvoudig kunnen vergelijken, wordt dit bij strings iets moeilijker, vooral als er gebruik gemaakt wordt van binaire inhoud. Met strcmp() en strncmp() lukt dit zonder probleem.
Beide functies nemen 2 strings als argument en de functie levert een 0 af als beide argumenten gelijk zijn, een getal groter dan 0 als string 1 groter is dan string 2, en een getal kleiner dan 0 als string 1 kleiner is dan string 2. De vergelijking gebeurt op ASCII-niveau.
strncmp() neemt nog een derde argument dat bepaald tot hoeveel karakters er moet vergeleken worden:
<?php
function vergelijk($woord1, $woord2, $aantal = 0) {
if ($aantal != 0){
$volgorde = strncmp($woord1, $woord2, $aantal);
} else {
$volgorde = strcmp($woord1, $woord2);
}
if($volgorde == -1){
print "voor";
} elseif ($volgorde == 1) {
print "na";
} else {
print "naast";
}
}
?>
<p>Sorteren:<br />
aap komt <?php vergelijk("aap", "zebra"); ?> zebra.<br />
zebra komt <?php vergelijk("zebra", "aap"); ?> aap.<br />
aap komt <?php vergelijk("aap", "aap"); ?> aap.<br />
aap komt <?php vergelijk("aap", "Aap"); ?> Aap.<br />
zeehond komt <?php vergelijk("zeehond", "zeekoe", 3); ?> zeekoe (sortering op eerste 3 tekens).</p>
Als we hoofdletterongevoelig willen werken doen we dit met strcasecmp() en strncasecmp().
Net zoals we in arrays kunnen zoeken naar onderdelen, kunnen we dit ook met strings. En net zoals bij arrays, begint een string te tellen vanaf positie 0 voor het eerste karakter.
Met substr() kunnen we een stukje uit een string filteren:
<?php $alfabet = "abcdefghijklmnopqrstuvwxyz"; ?>
<p>Het alfabet vanaf de derde letter: <?php print substr($alfabet, 2); ?>.<br />
Drie letters vanaf de derde letter: <?php print substr($alfabet, 2, 3); ?>.</p>
Het tweede argument bepaalt vanaf welke positie de karakters weergegeven worden. Een optioneel derde argument bepaalt hoeveel karakters er in totaal weergegeven worden.
Met strpos() kunnen we de positie bepalen van een substring uit een string. De functie geeft de eerste plaats weer waar het opgegeven argument voorkomt:
<?php
function opsporen($gezocht) {
$verdachten = 'Jan, Piet, Joris en Corneel';
$pos = strpos($verdachten, $gezocht);
if ($pos === false) {
print "$gezocht is niet op de lijst van verdachten ($verdachten) gevonden.";
} else {
print "$gezocht is op positie $pos op de lijst van verdachten ($verdachten) gevonden.";
}
}?>
<p><?php opsporen("Jan"); ?><br />
<?php opsporen("Dany"); ?></p>
Als de string niet gevonden wordt, wordt er een false weergegeven. Als er een derde argument opgegeven wordt ($pos =strpos($verdachten, $gezocht, 10);), bepaalt deze vanaf welke plaats er gezocht wordt.
Met strrpos() wordt er gezocht naar de laatste keer dat de gezochte substring voorkomt.
Met strstr() en stristr() gaan we op zoek naar een substring in een string, en worden de resterende tekens weergegeven:
<?php $email = "adm@snt.be"; ?>
<p>Het e-mailadres <?php print $email; ?>
heeft als domein <?php print strstr($email, '@'); ?>,<br />
en als gebruiker <?php print strstr($email, '@', true); ?>.</p>
Als de substring niet gevonden wordt, wordt er een false weergegeven.
Vanaf PHP versie 5.3.0 kun je met het derde argument true de tekens voor de gevonden substring weergeven.
Met stristr() wordt er gezocht zonder rekening te houden met hoofdletters.
Soms is het nuttig om een aantal karakters of een volledige substring te vervangen.
Met substr_replace vervangen we een aantal tekens in een string:
<?php $leerkracht = 'PHP wordt gegeven door Tim Broeckaert.'; ?>
<p>Tekstonderdelen vervangen:<br />
Originele tekst: <?php print $leerkracht; ?><br />
Volledige tekst vervangen: <?php print substr_replace($leerkracht, 'Dany Pinoy.', 0); ?><br />
Tekst aan het begin toevoegen: <?php print substr_replace($leerkracht, 'JavaScript wordt gegeven door Dany Pinoy. ', 0, 0); ?><br />
Naam leerkracht vervangen: <?php print substr_replace($leerkracht, 'Dany Pinoy', 23, 14); ?><br />
Einde van de tekst vervangen: <?php print substr_replace($leerkracht, 'Dany Pinoy en is een onderdeel van Webdesign', -15, -1); ?><br />
Voornaam verwijderen: <?php print substr_replace($leerkracht, '', 23, 4); ?></p>
Het derde argument geeft op, vanaf welke positie er moet vervangen worden. Een negatieve positie begint af te tellen vanaf het einde van de string.
Als er een vierde argument wordt opgegeven, zal deze het aantal te vervangen tekens bepalen. Het aantal -1 vervangt alle tekens tot het einde van de string.
Met str_replace() zoeken we naar een substring en vervangen we deze door een nieuwe.
<?php
$spreuk = "Zoals het klokje thuis tikt, tikt het nergens.";
$klinkers = array("a", "e", "i", "o", "u");
$voeding = "Eet elke dag fruit, groenten en vezels.";
$gezond = array("fruit", "groenten", "vezels");
$lekker = array("pizza", "friet", "roomijs");
?>
<p>Tekst vervangen:<br />
Originele spreuk: <?php print $spreuk; ?><br />
Werkwoord vervangen: <?php print str_replace("tikt", "roffelt", $spreuk); ?><br />
<?php str_replace("tikt", "roffelt", $spreuk, $aantal); ?>
Het werkwoord werd <?php print $aantal; ?> keer vervangen<br />
Zonder klinkers: <?php print str_replace($klinkers, "", $spreuk); ?><br />
Originele uitspraak: <?php print $voeding; ?><br />
Aangepaste uitspraak: <?php print str_replace($gezond, $lekker, $voeding); ?></p>
Weergeven