# Sorting Arrays

PHP has several functions that deal with sorting arrays, and this document exists to help sort it all out.

The main differences are:

- Some sort based on the `array` keys, whereas others by the values: `$array['key'] = 'value';`
- Whether or not the correlation between the keys and values are maintained after the sort, which may mean the keys are reset numerically (0,1,2 ...)
- The order of the sort: alphabetical, low to high (ascending), high to low (descending), numerical, natural, random, or user defined
- Note: All of these sort functions act directly on the array variable itself, as opposed to returning a new sorted array
- If any of these sort functions evaluates two members as equal then the order is undefined (the sorting is not stable).

## Sorting function attributes

Function name | Sorts by | Maintains key association | Order of sort | Related functions
`array_multisort` | value | associative yes, numeric no | first array or sort options | `array_walk`
`asort` | value | yes | low to high | `arsort`
`arsort` | value | yes | high to low | `asort`
`krsort` | key | yes | high to low | `ksort`
`ksort` | key | yes | low to high | `asort`
`natcasesort` | value | yes | natural, case insensitive | `natsort`
`natsort` | value | yes | natural | `natcasesort`
`rsort` | value | no | high to low | `sort`
`shuffle` | value | no | random | `array_rand`
`sort` | value | no | low to high | `rsort`
`uasort` | value | yes | user defined | `uksort`
`uksort` | key | yes | user defined | `uasort`
`usort` | value | no | user defined | `uasort`