Sorting a multidimensional array by value is a common task in PHP when dealing with database results, API responses, or complex data structures. Unlike simple arrays, multidimensional arrays require custom sorting functions to sort by a specific key or column.
In this guide, we will explore different methods to sort a multidimensional array by value in PHP, including array_multisort()
, usort()
, and uasort()
. We’ll also provide practical examples and best practices to ensure optimal performance.
Why Sort a Multidimensional Array by Value?
Sorting a multidimensional array is useful for:
-
Organizing data – Displaying sorted records in tables, reports, or dropdowns.
-
Improving usability – Making it easier for users to find relevant data.
-
Filtering search results – Sorting products, users, or categories based on name, price, or date.
-
Enhancing performance – Sorting data in PHP before rendering improves frontend efficiency.
Method 1: Using array_multisort()
for Sorting
array_multisort()
is a built-in PHP function that allows sorting arrays by multiple columns efficiently.
Example: Sorting an Array by a Specific Key
$data = [["name" => "John", "age" => 25, "score" => 85],["name" => "Alice", "age" => 30, "score" => 90],["name" => "Bob", "age" => 22, "score" => 80]];// Extract the column to sort by$ages = array_column($data, 'age');// Sort by age (ascending order)array_multisort($ages, SORT_ASC, $data);print_r($data);
How It Works
-
array_column($data, 'age')
extracts the age values from the array. -
array_multisort($ages, SORT_ASC, $data)
sorts the$data
array based on the extracted column.
✅ Best for: Sorting by a single column efficiently with minimal code.
Method 2: Using usort()
for Custom Sorting
usort()
allows defining a custom comparison function for flexible sorting.
Example: Sorting by Name Alphabetically
$data = [["name" => "John", "age" => 25, "score" => 85],["name" => "Alice", "age" => 30, "score" => 90],["name" => "Bob", "age" => 22, "score" => 80]];usort($data, function ($a, $b) {return strcmp($a["name"], $b["name"]); // Sort by name alphabetically});print_r($data);
How It Works
-
usort($data, function ($a, $b) {...})
sorts$data
based on a custom function. -
strcmp($a["name"], $b["name"])
compares two names and sorts them alphabetically.
✅ Best for: Custom sorting logic when sorting by strings or complex conditions.
Method 3: Sorting in Descending Order
To sort in descending order, simply reverse the comparison in usort()
.
Example: Sorting by Score (Highest to Lowest)
usort($data, function ($a, $b) {return $b["score"] - $a["score"]; // Sort by score in descending order});print_r($data);
How It Works
$b["score"] - $a["score"]
ensures higher scores appear first.
✅ Best for: Ranking-based sorting, such as leaderboards or product ratings.
Method 4: Using uasort()
to Maintain Key Associations
uasort()
works like usort()
but preserves array keys, which is useful when working with associative arrays.
Example: Sorting Associative Arrays by Age
$users = ["user1" => ["name" => "John", "age" => 25],"user2" => ["name" => "Alice", "age" => 30],"user3" => ["name" => "Bob", "age" => 22]];uasort($users, function ($a, $b) {return $a["age"] - $b["age"]; // Sort by age (ascending)});print_r($users);
How It Works
uasort()
sorts the array while keeping the original keys intact.
✅ Best for: Maintaining associative key-value pairs while sorting.
Method 5: Sorting by Multiple Columns
Sometimes, you need to sort by multiple values, such as sorting by age, then by name if ages are the same.
Example: Sorting by Age, Then by Name
usort($data, function ($a, $b) {if ($a["age"] == $b["age"]) {return strcmp($a["name"], $b["name"]); // If age is the same, sort by name}return $a["age"] - $b["age"]; // Sort by age first});print_r($data);
How It Works
-
First, it compares age.
-
If two elements have the same age, it sorts them by name alphabetically.
✅ Best for: Sorting complex datasets where multiple criteria need to be applied.
Performance Considerations
When sorting large arrays, performance is important. Here are some tips:
1. Prefer array_multisort()
for Simplicity
array_multisort()
is faster for sorting by a single column.
2. Use usort()
for Flexibility
- Allows custom sorting logic, but slightly slower than
array_multisort()
.
3. Preserve Keys with uasort()
- Use
uasort()
when key preservation is important.
4. Consider Database-Level Sorting
- For large datasets, sorting with SQL (
ORDER BY
) is often more efficient than sorting in PHP.
Comparing Sorting Methods
Method | Pros | Cons | Best For |
---|---|---|---|
array_multisort() |
Fast, built-in | Requires array_column() |
Simple column sorting |
usort() |
Custom sorting logic | Slightly slower | Complex sorting conditions |
uasort() |
Preserves keys | Only works for associative arrays | Sorting while maintaining key association |
Multi-column sort | Handles multiple criteria | Requires if conditions |
Sorting with priority levels |
Sorting a multidimensional array by value in PHP can be done using various methods like array_multisort()
, usort()
, and uasort()
.
-
Use
array_multisort()
for fast, simple sorting. -
Use
usort()
for custom sorting logic. -
Use
uasort()
when preserving keys is necessary. -
Use multi-column sorting when sorting by multiple criteria.
By choosing the right method based on your needs, you can efficiently organize data in PHP applications, improving usability and performance.