Sorting Arrays

You want to sort an array in a specific way.

Use sort() to sort an array using the traditional definition of sort. It doesn't preserve the key/value association between elements; instead, entries are reindexed starting at 0 and going upward.

To sort numerically, pass SORT_NUMERIC as the second argument to sort().

Use rsort() to sort the array in reverse order.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN">
<head>
<title>PHP</title>
<meta Name="Author" Content="Hann So">
</head>
<body>
<p>
<?php
$fruits = array('Apples', 'Grapes', 'Bananas', 'Oranges');
print_r($fruits);
sort($fruits);
echo "<p><b>Use sort() to sort the array.</b></p>";
print_r($fruits);

rsort($fruits);
echo "<p><b>Use rsort() to sort the array in reverse order.</b></p>";
print_r($fruits);

// Sort numerically
echo "<p><b>This is an array with numbers.</b></p>";
$scores = array(1,10,2,20,3,30);
print_r($scores);
sort($scores, SORT_NUMERIC);
echo "<p><b>Sort numerically with SORT_NUMERIC as argument.</b></p>";
print_r($scores);

rsort($scores, SORT_NUMERIC);
echo "<p><b>Sort numerically in reverse order.</b></p>";
print_r($scores);

echo "<p><b>This is an associative array.</b></p>";
$fruits2 = array('red'=>'Apples', 'green'=>'Grapes', 'yellow'=>'Bananas', 'orange'=>'Oranges');
print_r($fruits2);
sort($fruits2);
echo "<p><b>Use sort() to sort the associative array.</b></p>";
print_r($fruits2);
?>
</p>
</body>
</html>

View the effect

To preserve the key/value links, use asort(). Use arsort() to sort in reverse order.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN">
<head>
<title>PHP</title>
<meta Name="Author" Content="Hann So">
</head>
<body>
<p>
<?php
$fruits = array('Apples', 'Grapes', 'Bananas', 'Oranges');
print_r($fruits);
asort($fruits);
echo "<p><b>Use asort() to sort by keeping the key/value.</b></p>";
print_r($fruits);

arsort($fruits);
echo "<p><b>Use arsort() to sort the array in reverse order.</b></p>";
print_r($fruits);

// Sort numerically
echo "<p><b>This is an array with numbers.</b></p>";
$scores = array(1,10,2,20,3,30);
print_r($scores);
asort($scores, SORT_NUMERIC);
echo "<p><b>Sort numerically with SORT_NUMERIC as argument.</b></p>";
print_r($scores);

arsort($scores, SORT_NUMERIC);
echo "<p><b>Sort numerically in reverse order.</b></p>";
print_r($scores);

echo "<p><b>This is an associative array.</b></p>";
$fruits2 = array('red'=>'Apples', 'green'=>'Grapes', 'yellow'=>'Bananas', 'orange'=>'Oranges');
print_r($fruits2);
asort($fruits2);
echo "<p><b>Use asort() to sort the associative array by keeping the key/value.</b></p>";
print_r($fruits2);
?>
</p>
</body>
</html>

View the effect

Use natsort() to sort the array using a natural sorting algorithm. Under natural sorting, you can mix strings and numbers inside the elements and still get the right answer.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN">
<head>
<title>PHP</title>
<meta Name="Author" Content="Hann So">
</head>
<body>
<p>
<?php
$fruits = array('Apples20', 'Apples1', 'Apples10', 'Apples5');
print_r($fruits);
natsort($fruits);
echo "<p><b>Use natsort() to natural sort.</b></p>";
print_r($fruits);

echo "<p><b>This is an associative array.</b></p>";
$fruits2 = array('red'=>'Apples20', 'green'=>'Apples1', 'yellow'=>'Apples10', 'orange'=>'Apples5');
print_r($fruits2);
natsort($fruits2);
echo "<p><b>Use natsort() to sort the associative array.</b></p>";
print_r($fruits2);
?>
</p>
</body>
</html>

View the effect

Use ksort() to sort the array based on keys and not values. Use krsort() to sort by reverse by keys.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN">
<head>
<title>PHP</title>
<meta Name="Author" Content="Hann So">
</head>
<body>
<p>
<?php
$fruits = array(4=>'Apples', 2=>'Grapes', 'Bananas', 'Oranges');
print_r($fruits);
ksort($fruits);
echo "<p><b>Use ksort() to sort by keys.</b></p>";
print_r($fruits);

krsort($fruits);
echo "<p><b>Use krsort() to sort the array in reverse order.</b></p>";
print_r($fruits);

echo "<p><b>This is an associative array.</b></p>";
$fruits2 = array('red'=>'Apples', 'green'=>'Grapes', 'yellow'=>'Bananas', 'orange'=>'Oranges');
print_r($fruits2);
ksort($fruits2);
echo "<p><b>Use ksort() to sort the associative array by keys.</b></p>";
print_r($fruits2);

krsort($fruits2);
echo "<p><b>Use krsort() to sort the associative array in reverse order.</b></p>";
print_r($fruits2);
?>
</p>
</body>
</html>

View the effect

To define your own sorting routine, use usort() in combination with a custom comparison function.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN">
<head>
<title>PHP</title>
<meta Name="Author" Content="Hann So">
</head>
<body>
<p>
<?php
// sort in natural order
// strnatcmp() returns a value greater than 0 if $a>$b,
// 0 if $a=$b, and less than 0 if $a<$b
function natrsort($a, $b) {
	return strnatcmp($a, $b);
}

$fruits = array('Apples20', 'Apples1', 'Apples10', 'Apples5');
print_r($fruits);
usort($fruits, 'natrsort');
echo "<p><b>Use usort() to customize sort.</b></p>";
print_r($fruits);
</p>
</body>
</html>

View the effect


Arrays (cintinued) | Adding all Values in an Array | Flipping an Array | Extracting Variables from Arrays | Imploding Arrays | Exploding Arrays | Navigating through Arrays | Merging Arrays | Comparing Arrays | Sorting Arrays | Creating Multidimensional Arrays | Sorting Multiple Arrays
© 2008: Hann So
email: hso@voyager.deanza.edu