# Sorting Arrays

In the previous section we showed how to reverse the elements of an array. In this section we show how to sort arrays. Unlike the `array_reverse( )` function that returns a copy of the source array in the new order, the sorting functions rearrange the elements in the source array itself. Because of this behavior, the sort functions must be passed a variable, not an expression.

## Sorting with sort( ) and rsort( )

The simplest array-sorting functions are `sort( )` and `rsort( )`, which rearrange the elements of the subject array in ascending and descending order, respectively:

```sort(array subject [, integer sort_flag])
rsort(array subject [, integer sort_flag])
```

Both functions sort the subject array based on the values of each element. The following example shows the `sort( )` function on an array of integers:

```\$numbers = array(24, 19, 3, 16, 56, 8, 171);
sort(\$numbers);
foreach(\$numbers as \$n)
echo \$n . " ";
```

The output of the example prints the elements sorted by value:

```3 8 16 19 24 56 171
```

Another way to examine the contents of the sorted array is to use the `print_r( )` function described in Section 2.1.7. The output of the statement `print_r(\$numbers)` shows the sorted values with the associated index:

```Array (  => 3
 => 8
 => 16
 => 19
 => 24
 => 56
 => 171 )
```

The following example shows the `rsort( )` function on the same array:

```\$numbers = array(24, 19, 3, 16, 56, 8, 171);
rsort(\$numbers);
print_r(\$numbers);
```

The output of the example shows the elements sorted in reverse order by value:

```Array (  => 171
 => 56
 => 24
 => 19
 => 16
 => 8
 => 3 )
```

By default, PHP sorts strings in alphabetical order and numeric values in numeric order. An optional parameter, `sort_flag`, can be passed to force the string or numeric sorting behavior. In the following example, the PHP constant `SORT_STRING` sorts the numbers as if they were strings:

```\$numbers = array(24, 19, 3, 16, 56, 8, 171);
sort(\$numbers, SORT_STRING);
print_r(\$numbers);
```

The output of the example shows the result:

```Array (  => 16
 => 171
 => 19
 => 24
 => 3
 => 56
 => 8 )
```

Many of the array sorting functions accept a `sort_flag` parameter. Other sort flags are `SORT_REGULAR` to compare items in the array normally and `SORT_NUMERIC` that forces items to be compared numerically.

`sort( )` and `rsort( )` can be used on associative arrays, but the keys are lost. The resulting array contains only the values in the sorted order. Consider the following example:

```\$map =
array("o"=>"kk", "e"=>"zz", "z"=>"hh", "a"=>"rr");
sort(\$map);
print_r(\$map);
```

The `print_r( )` output shows the modified array without the key values:

```Array (  => hh  => kk  => rr  => zz )
```