# 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, ascending (low to high), descending (high to low), 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 they retain their original order. Prior to PHP 8.0.0, their order were undefined (the sorting was not stable).

## Sorting function attributes

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