~~SLIDESHOW~~
Supplementary Material
Provided for Reference. This material is no longer taught on this module.
Lecturer: Dr Chris P. Jobling.
More on the language features of PHP
We continue our review of the Basics of PHP with a discussion of arrays, functions and regular expressions.
Based on Chapter 12 of Robert W. Sebasta, Programming the World-Wide Web, 3rd Edition, Addison Wesley, 2006. and Chapter 12 of Chris Bates, Web Programming: Building Internet Applications, 3rd Edition, John Wiley, 2006.
Further features of the PHP language with examples
At the end of this lecture you should be able to answer these questions:
array_keys
and array_values
functions do? At the end of this lecture you should be able to answer these questions:
in_array
function do? implode
and explode
functions. next
, reset
, and prev
functions. foreach
statement? sort
function on an array that has both string and numeric values. At the end of this lecture you should be able to answer these questions:
sort
and asort
functions? return
statement? At the end of this lecture you should be able to answer these questions:
array()
construct, which takes one or more key ⇒ value
pairs as parameters and returns an array of them $list = array(0 => "apples", 1 => "oranges", 2 => "grapes")
$list = array("make" => "Cessna", "model" => "C210", "year" => 1960, 3 => "sold"); $list = array(1, 3, 5, 7, 9); $list = array(5, 3 => 7, 5 => 10, "month" => "May"); $colours = array('red', 'blue', 'green', 'yellow');
$list[4] = 7; $list["day"] = "Tuesday"; $list[] = 17;
$highs = array("Mon" => 74, "Tue" => 70, "Wed" => 67, "Thu" => 62, "Fri" => 65); $days = array_keys($highs); $temps = array_values($highs);
unset
:unset($list); unset($list[4]); # No index 4 element now
is_array($list)
returns true
if $list
is an arrayin_array(17, $list)
returns true if 17 is an element of $list
explode(“ ”, $str)
creates an array with the values of the words from $str
, split on a space implode(“ ”, $list)
creates a string of the elements from $list
, separated by a space current
and next
:$colours = array("blue", "red", "green", "yellow"); $colour = current($colours); print("$colour <br />"); while ( $colour = next($colours) ) { print ("$colour <br />"); }
FALSE
each
, instead of next
:while ( $element = each($colours) ) { print ("$element['value'] <br />"); }
prev
function moves current
backwardsarray_push($list, $element)
and array_pop($list)
foreach (array_name as scalar_name) { … }:
foreach ($colours as $colour) { print "Is $colour your favourite colour?<br />"; }
Is red your favourite colour?
Is blue your favourite colour? Is green your favourite colour? Is yellow your favourite colour?
foreach
can iterate through both keys and values:foreach ($colours as $key => $colour) { ... }
$key
and $colour
are defined$ages = array("Bob" => 42, "Mary" => 43); foreach ($ages as $name => $age) { print("$name is $age years old <br />"); }
sort
sorts the values of an array, leaving the keys in their present order – intended for traditional arrayssort($list);
sort
function does not return anything$list = ('h', 100, 'c', 20, 'a'); sort($list); // Produces ('a', 'c', 'h', 20, 100)
sort($list, SORT_NUMERIC);
asort
sorts the values of an array, while keeping the key/value relationships – intended for associative arraysrsort
sorts the values of an array into reverse orderksort
sorts the elements of an array by the keys, maintaining the key/value relationships e.g.:$list("Fred" => 17, "Mary" => 21, "Bob" => 49, "Jill" => 28); ksort($list); // $list is now ("Bob" => 49, "Fred" => 17, "Jill" => 28, "Mary" => 21)
krsort
sorts the elements of an array by the keys into reverse order<<!DOCTYPE html> <!-- sorting.php - An example to illustrate several of the sorting functions --> <html lang="en"> <head> <meta charset="utf-8" /> <title> sorting.php - An example to illustrate several of the sorting functions </title> </head> <body> <?php $original = array("Fred" => 31, "Al" => 27, "Gandalf" => "wizzard", "Betty" => 42, "Frodo" => "hobbit"); ?> <h4> Original Array </h4> <?php foreach ($original as $key => $value) { print("[$key] => $value <br />"); } ?> <h4> Array sorted with sort </h4> <?php $new = $original; sort($new); foreach ($new as $key => $value) { print("[$key] = $value <br />"); } ?> <h4> Array sorted with asort </h4> <?php $new = $original; asort($new); foreach ($new as $key => $value) { print("[$key] = $value <br />"); } ?> <h4> Array sorted with ksort </h4> <?php $new = $original; ksort($new); foreach ($new as $key => $value) { print("[$key] = $value <br />"); } ?> </body> </html>
function function_name( [formal_parameters] ) { ... }
return
function is used to return a value; if there is no return
, there is no returned value unbound
function addOne(&$param) { $param++; } $it = 16; addOne($it); // $it is now 17
function subOne($param) { $param--; } $it = 16; subOne(&$it); // $it is now 15
return
function &newArray($x) { ... }
global $sum;
static $sum = 0; # $sum is static
preg
) preg_match(regex, str [,array])
array
is where to put the matches The word_table.php (word_table.php @ localhost) example illustrates the use of functions and regular expressions
<!DOCTYPE html> <!-- word_table.php Uses a function to split a given string of text into its constituent words. It also determines the frequency of occurrence of each word. The words are separated by whitespace or punctuation, possibly followed by whitespace. The punctuation can be a period, a comma, a semicolon, a colon, an exclamation point, or a question mark. The main driver program calls the function and displays the results. --> <html lang="en"> <head> <meta charset="utf-8" /> <title> Word Table </title> </head> <body> <?php // Function splitter // Parameter: a string of text containing words and punctuation // Returns: an array in which the unique words of the string are // the keys and their frequencies are the values. function splitter($str) { // Create the empty word frequency array $freq = array(); // Split the parameter string into words $words = preg_split("/[ .,;:!?]\s*/", $str); // Loop to count the words (either increment or initialize to 1) foreach ($words as $word) { $keys = array_keys($freq); if (in_array($word, $keys)) $freq[$word]++; else $freq[$word] = 1; } return $freq; }#** End of splitter // Main test driver $str = "apples are good for you, or don't you like apples? or maybe you like oranges better than apples"; // Call splitter $tbl = splitter($str); // Display the words and their frequencies print "<br /> Word Frequency <br /><br />"; $sorted_keys = array_keys($tbl); sort($sorted_keys); foreach ($sorted_keys as $word) { print "$word $tbl[$word] <br />"; } ?> </body> </html>
Word Frequency apples 3 are 1 better 1 don't 1 for 1 good 1 like 2 maybe 1 or 2 oranges 1 than 1 you 3
Further features of the PHP language with examples
At the end of this lecture you should be able to answer these questions:
array_keys
and array_values
functions do? At the end of this lecture you should be able to answer these questions:
in_array
function do? implode
and explode
functions. next
, reset
, and prev
functions. foreach
statement? sort
function on an array that has both string and numeric values. At the end of this lecture you should be able to answer these questions:
sort
and asort
functions? return
statement? At the end of this lecture you should be able to answer these questions:
Write the following PHP functions and code to test them
word_table.php
discussed in this lecture to place the output table in an XHTML table. These and other PHP exercises are also available on the homework page.
PHP for Web Applications