Using usort in PHP

usort –  Sort an array by values using a user-defined comparison function

Description

bool usort ( array array, callback cmp_function)

This function will sort an array by its values using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function.

The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.

Note: If two members compare as equal, their order in the sorted array is undefined. Up to PHP 4.0.6 the user defined functions would keep the original order for those elements, but with the new sort algorithm introduced with 4.1.0 this is no longer the case as there is no solution to do so in an efficient way.

Returns TRUE on success or FALSE on failure.

Example 1. usort() example

<?php
function cmp($a, $b) {
if (
$a == $b) {
return
0;
}
return (
$a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, “cmp”);

while (list($key, $value) = each($a)) {
echo
“$key: $value\n;
}
?>

This example would display:

0: 1
1: 2
2: 3
3: 5
4: 6

Note: Obviously in this trivial case the sort() function would be more appropriate.

Example 2. usort() example using multi-dimensional array

<?php
function cmp($a, $b) {
return
strcmp($a[“fruit”], $b[“fruit”]);
}

$fruits[0][“fruit”] = “lemons”;
$fruits[1][“fruit”] = “apples”;
$fruits[2][“fruit”] = “grapes”;

usort($fruits, “cmp”);

while (list($key, $value) = each($fruits)) {
echo
\$fruits[$key]: ” . $value[“fruit”] . “\n”;
}
?>

When sorting a multi-dimensional array, $a and $b contain references to the first index of the array.

This example would display:

$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons

Example 3. usort() example using a member function of an object

<?php
class TestObj {
var
$name;

function TestObj($name) {
$this->name = $name;
}

/* This is the static comparing function: */
function cmp_obj($a, $b) {
$al = strtolower($a->name);
$bl = strtolower($b->name);
if (
$al == $bl) {
return
0;
}
return (
$al > $bl) ? +1 : -1;
}
}

$a[] = new TestObj(“c”);
$a[] = new TestObj(“b”);
$a[] = new TestObj(“d”);

usort($a, array(“TestObj”, “cmp_obj”));

foreach ($a as $item) {
echo
$item->name . “\n”;
}
?>

This example would display:

b
c
d

Using uksort in PHP

uksort –  Sort an array by keys using a user-defined comparison function

Description

bool uksort ( array array, callback cmp_function)

uksort() will sort the keys of an array using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function.

Function cmp_function should accept two parameters which will be filled by pairs of array keys. The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.

Returns TRUE on success or FALSE on failure.

Example 1. uksort() example

<?php
function cmp($a, $b) {
if (
$a == $b) {
return
0;
}
return (
$a > $b) ? -1 : 1;
}

$a = array(4 => “four”, 3 => “three”, 20 => “twenty”, 10 => “ten”);

uksort($a, “cmp”);

while (list($key, $value) = each($a)) {
echo
“$key: $value\n;
}
?>

This example would display:

20: twenty
10: ten
4: four
3: three

Using uasort in PHP

uasort –  Sort an array with a user-defined comparison function and maintain index association

Description

bool uasort ( array array, callback cmp_function)

This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant. The comparison function is user-defined.

Returns TRUE on success or FALSE on failure.

Note: Please see usort() and uksort() for examples of user-defined comparison functions.

Using Sort Function in PHP

sort – Sort an array

Description

bool sort ( array array [, int sort_flags])

This function sorts an array. Elements will be arranged from lowest to highest when this function has completed.

Note: This function assigns new keys for the elements in array. It will remove any existing keys you may have assigned, rather than just reordering the keys.

Returns TRUE on success or FALSE on failure.

Example 1. sort() example

<?php

$fruits = array(“lemon”, “orange”, “banana”, “apple”);
sort($fruits);
reset($fruits);
while (list(
$key, $val) = each($fruits)) {
echo
“fruits[” . $key . “] = ” . $val . “\n”;
}

?>

This example would display:

fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange

The fruits have been sorted in alphabetical order.

The optional second parameter sort_flags may be used to modify the sorting behavior using these values:

Sorting type flags:

Note: The second parameter was added in PHP 4.

Using shuffle in PHP

shuffle – Shuffle an array

Description

void shuffle ( array array)

This function shuffles (randomizes the order of the elements in) an array. You must use srand() to seed this function.

Example 1. shuffle() example

<?php
$numbers
= range(1, 20);
srand((float)microtime() * 1000000);
shuffle($numbers);
while (list(,
$number) = each($numbers)) {
echo
“$number “;
}
?>

Note: As of PHP 4.2.0, there is no need to seed the random number generator with srand() or mt_srand() as this is now done automatically.

Using rsort in PHP

rsort – Sort an array in reverse order

Description

bool rsort ( array array [, int sort_flags])

This function sorts an array in reverse order (highest to lowest).

Returns TRUE on success or FALSE on failure.

Example 1. rsort() example

<?php
$fruits
= array(“lemon”, “orange”, “banana”, “apple”);
rsort($fruits);
reset($fruits);
while (list(
$key, $val) = each($fruits)) {
echo
“$key = $val\n;
}
?>

This example would display:

0 = orange
1 = lemon
2 = banana
3 = apple

The fruits have been sorted in reverse alphabetical order.

You may modify the behavior of the sort using the optional parameter sort_flags

Using reset in PHP

reset –  Set the internal pointer of an array to its first element

Description

mixed reset ( array array)

reset() rewinds array’s internal pointer to the first element and returns the value of the first array element.

Example 1. reset() example

<?php

$array = array(’step one’, ’step two’, ’step three’, ’step four’);

// by default, the pointer is on the first element
echo current($array) . “<br />\n”; // “step one”

// skip two steps
next($array);
next($array);
echo
current($array) . “<br />\n”; // “step three”

// reset pointer, start again on step one
reset($array);
echo
current($array) . “<br />\n”; // “step one”

?>

Using range function in PHP

range –  Create an array containing a range of elements

Description

array range ( int low, int high [, int step])

range() returns an array of elements from low to high, inclusive. If low > high, the sequence will be from high to low.

New parameter: The optional step parameter was added in 5.0.0.

If a step value is given, it will be used as the increment between elements in the sequence. step should be given as a positive number. If not specified, step will default to 1.

Example 1. range() examples

<?php
// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach (range(0, 12) as $number) {
echo
$number;
}

// The step parameter was introduced in 5.0.0
// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
foreach (range(0, 100, 10) as $number) {
echo
$number;
}

// Use of character sequences introduced in 4.1.0
// array(’a', ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’);
foreach (range(‘a’, ‘i’) as $letter) {
echo
$letter;
}
// array(’c', ‘b’, ‘a’);
foreach (range(‘c’, ‘a’) as $letter) {
echo
$letter;
}
?>

Note: Prior to PHP version 4.1.0, range() only generated incrementing integer arrays. Support for character sequences and decrementing arrays was added in 4.1.0. Character sequence values are limited to a length of one. If a length greater than one is entered, only the first character is used.

Caution
In PHP versions 4.1.0 through 4.3.2, range() sees numeric strings as strings and not integers. Instead, they will be used for character sequences. For example, “4242″ is treated as “4″.

Using Prev in PHP

prev – Rewind the internal array pointer

Description

mixed prev ( array array)

Returns the array value in the previous place that’s pointed to by the internal array pointer, or FALSE if there are no more elements.

Warning
If the array contains empty elements then this function will return FALSE for these elements as well. To properly traverse an array which may contain empty elements see the each() function.

prev() behaves just like next(), except it rewinds the internal array pointer one place instead of advancing it.

Example 1. Example use of prev() and friends

<?php
$transport
= array(‘foot’, ‘bike’, ‘car’, ‘plane’);
$mode = current($transport); // $mode = ‘foot’;
$mode = next($transport);    // $mode = ‘bike’;
$mode = next($transport);    // $mode = ‘car’;
$mode = prev($transport);    // $mode = ‘bike’;
$mode = end($transport);     // $mode = ‘plane’;
?>

Using Next Function in PHP

next –  Advance the internal array pointer of an array

Description

mixed next ( array array)

Returns the array value in the next place that’s pointed to by the internal array pointer, or FALSE if there are no more elements.

next() behaves like current(), with one difference. It advances the internal array pointer one place forward before returning the element value. That means it returns the next array value and advances the internal array pointer by one. If advancing the internal array pointer results in going beyond the end of the element list, next() returns FALSE.

Warning
If the array contains empty elements, or elements that have a key value of 0 then this function will return FALSE for these elements as well. To properly traverse an array which may contain empty elements or elements with key values of 0 see the each() function.

Example 1. Example use of next() and friends

<?php
$transport
= array(‘foot’, ‘bike’, ‘car’, ‘plane’);
$mode = current($transport); // $mode = ‘foot’;
$mode = next($transport);    // $mode = ‘bike’;
$mode = next($transport);    // $mode = ‘car’;
$mode = prev($transport);    // $mode = ‘bike’;
$mode = end($transport);     // $mode = ‘plane’;
?>