You are here:Home » php » Strings in PHP

Strings in PHP

In this part of the PHP programming tutorial, we will work with string data in more detail.
Strings are the most important data types in computer languages. That is why we dedicate a whole chapter to working with strings in PHP.

String literals

A string literal is the notation for representing a string value within the text of a computer program. In PHP programming language, strings can be created with single quotes, double quotes or using the heredoc syntax.
<?php

$a = "PHP";
$b = 'PERL';

echo $a, $b;

?>
In this code example, we create two strings and assign them to $a, $b variables. We print them with the echo command. The first string is created with the double quote delimiters, the second one with single quotes.
The next example will create a string with a heredoc syntax. The heredoc preserves the line breaks and other whitespace (including indentation) in the text. The heredoc is created with <<< followed by a delimiting identifier, followed, starting on the next line, by the text to be quoted, and then closed by the same identifier on its own line. The closing identifier must not be indented. It can only contain alphanumeric characters and underscores, and must start with a non-digit character or underscore.
<?php

$str = <<<TEXT
"That is just as I intended." Vautrin said. "You know quite well what
you are about. Good, my little eaglet! You are born to command, you
are strong, you stand firm on your feet, you are game! I respect you."
TEXT;

echo $str, "\n";

?>
The semicolon is optional.
echo "PHP " . "language"; # prints PHP language
PHP uses the dot (.) operator to concatenate two strings.

Escape characters

An escape character is a single character designated to invoke an alternative interpretation on immediately subsequent characters in a character sequence. (Wikipedia)
php > echo "   bbb\raaa";
aaabbb
The carriage return \r is a control character for end of line return to beginning of line.
<?php
echo "Incompatible, it don't matter though\n'cos someone's bound to hear my cry\n";
echo "Speak out if you do\nYou're not easy to find\n";
?>
The new line is a control character, which begins a new line of text.
$ php strophe.php 
Incompatible, it don't matter though
'cos someone's bound to hear my cry
Speak out if you do
You're not easy to find
echo "Towering\tinferno"; # Towering    inferno
The horizontal tab puts a space between text.
"Johnie's dog"
'Johnie\'s dog'
Single and double quotes can be nested. Or in case we use only single quotes, we can use the backslash to escape the default meaning of a single quote.
<?php

$text = "
\"That is just as I intended.\" Vautrin said. \"You know quite well what
you are about. Good, my little eaglet! You are born to command, you
are strong, you stand firm on your feet, you are game! I respect you.\"
";

echo $text;
?>
In this example, we have a multiline text, which includes direct speech. The double quotes are escaped with the backslash character.
php > $var = 233;
php > echo "$var";
233
php > echo "\$var is $var";
$var is 233
The dollar sign $ has also a special meaning in PHP. It denotes a variable. If a variable is used inside a string, it is interpolated, e.g. the value of the variable is used. To echo a variable name, we escape the $ character \$.

Operations on strings

PHP has a large number of useful useful built-in functions that can be used for working with strings.
echo strlen("Eagle"); # prints 5
echo strtoupper("Eagle"); # prints EAGLE
echo strtolower("Eagle"); # prints eagle
Here we use three functions. The strlen() function returns a number of characters in the string. The strtoupper() converts characters to uppercase letters, the strtolower() converts characters to lowercase letters.
<?php

$sentence = "There are 22 apples";

$alphas = 0;
$digits = 0;
$spaces = 0;

$length = strlen($sentence);

for ($i = 0; $i < $length; $i++)
{

$c = $sentence[$i];
if (ctype_alpha($c)) $alphas++;
if (ctype_digit($c)) $digits++;
if (ctype_space($c)) $spaces++;

}


echo "There are $length characters.\n";
echo "There are $alphas alphabetic characters.\n";
echo "There are $digits digits.\n";
echo "There are $spaces spaces.\n";

?>
In our example, we have a string sentence. We calculate the absolute number of characters, number of alphabetic characters, digits and spaces in the sentence. To do this, we use functions: strlen(), ctype_alpha(), ctype_digit() and ctype_space().
$ php letters.php 
There are 19 characters.
There are 14 alphabetic characters.
There are 2 digits.
There are 3 spaces.
Next, we cover the substr() function.
echo substr("PHP language", 0, 3); # prints PHP
echo substr("PHP language", -8); # prints language
The function returns a part of a string. The first parameter is the specified string. The second parameter is the start of the substring. The third parameter is optional. It is the length of the returned substring. Default is to the end of the string.
The str_repeat() function repeats a string a specified number of times.
<?php

echo str_repeat("#", 18);
echo "\nProject Neurea\n";
echo "Priority high\n";
echo "Security maximum\n";
echo str_repeat("#", 18);
echo "\n";

?>
We use the str_repeat() function to create two lines of the # character.
$ php repeat.php 
##################
Project Neurea
Priority high
Security maximum
##################
In the next example, we will randomly modify a string.
<?php

$string = "ZetCode";

echo str_shuffle($string), "\n";
echo str_shuffle($string), "\n";
echo str_shuffle($string), "\n";
echo str_shuffle($string), "\n";
echo str_shuffle($string), "\n";
echo str_shuffle($string), "\n";
echo str_shuffle($string), "\n";

?>
The str_shuffle() randomly shuffles a string.
$ php shuffle.php 
CteZeod
teZCdeo
ZteoCed
odCteZe
oCdetZe
eedtCZo
edCetoZ
The explode() function is used to split a string into parts. It returns an array of split string parts.
<?php

$text = "Rastignac heard him in dazed bewilderment;
he could not find a word in reply. Just then Goriot
came in, and Bianchon and a few of the
boarders likewise appeared.";

$sentences = explode(".", $text);

echo $sentences[0];
echo $sentences[1];

?>
We have two sentences. Each sentence is ended with a full stop.
 $sentences = explode(".", $text);
Here we split the text with the explode() function. The function will cut a string into pieces, whenever it finds the dot (.) character.
<?php

echo "Ajax Amsterdam" . " - " . "Inter Milano " . "2:3\n";
echo "Real Madridi" . " - " . "AC Milano " . "3:3\n";
echo "Dortmund" . " - " . "Sparta Praha ". "2:1\n";

?>
We concatenate strings with the dot operator.
$ php teams1.php
Ajax Amsterdam - Inter Milano 2:3
Real Madridi - AC Milano 3:3
Dortmund - Sparta Praha 2:1
The output does not look very good. We will change it so that it looks better.
<?php

$teams = array(
array("Ajax Amsterdam", "Inter Milano"),
array("Real Madrid", "AC Milano"),
array("Dortmund", "Sparta Praha")
);

$results = array("2:3", "3:3", "2:1");

$i = 0;

foreach ($teams as $team) {
echo str_pad($team[0], 14);
echo str_pad("-", 3, " ", STR_PAD_BOTH);
echo str_pad($team[1], 14);
echo str_pad($results[$i], 3, " ", STR_PAD_LEFT);
echo "\n";
$i++;
}
?>
We improve the output format with the str_pad() function. It adds a specified string (in our case a space) to the left of the string, to the right or to both sides.
$ php teams2.php 
Ajax Amsterdam - Inter Milano 2:3
Real Madrid - AC Milano 3:3
Dortmund - Sparta Praha 2:1
We manage to give a more nicely formatted output.

String formatting

String formatting or string interpolation is dynamic putting of various values into a string.
<?php

printf("There are %d oranges and %d apples in the basket.\n", 12, 32);

?>
We use the %d formatting specifier. The d character says, we are expecting an integer. After the string, we put a modulo operator and an argument. In this case an integer value.
$ php fruits.php 
There are 12 oranges and 32 apples in the basket.
In the next example, we will interpolate a float and a string value.
<?php

printf("Height: %f %s\n", 172.3, "cm");

?>
The formatting specifier for a float value is %f and for a string %s.
$ php height.php 
Height: 172.300000 cm
We might not like the fact, that the number in the previous example has 6 decimal places by default. We can control the number of the decimal places in the formatting specifier.
<?php

printf("Height: %.1f %s\n", 172.3, 'cm');

?>
The decimal point followed by an integer controls the number of decimal places. In our case, the number will have exactly one decimal place.
$ php height2.php 
Height: 172.3 cm
The following example shows other formatting options.
<?php

# hexadecimal
printf("%x\n", 300);

# octal
printf("%o\n", 300);

# scientific
printf("%e\n", 300000);

?>
The first interpolation works with hexadecimal numbers. The x character will format the number in hexadecimal notation. The o character shows the number in octal format. The e character will show the number in scientific format.
$ php formatting.php 
12c
454
3.000000e+5
The next example will print three columns of numbers.
<?php

foreach (range(1,11) as $num) {
echo $num , " ", $num*$num, " ",
$num*$num*$num, "\n";
}

?>
The numbers are left justified and the output look terrible.
$ php columns.php 
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
To correct this, we use the width specifier. The width specifier defines the minimal width of the object. If the object is smaller than the width, it is filled with spaces.
<?php

foreach (range(1,11) as $num) {
printf("%2d %3d %4d\n", $num, $num*$num, $num*$num*$num);
}

?>
Now the output looks OK. 2 says that the first column will be 2 characters wide.
$ php columns2.php 
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
This part of the PHP tutorial covered strings.

0 comments:

Post a Comment