To sort a 2D array in PHP by a specific column value, you can use the usort()
or uasort()
functions with a custom comparison function. Here’s a detailed guide with examples:
1. Basic Sorting (Ascending/Descending)
Use usort()
to sort by a numeric column (e.g., age
).
Example 1: Sort by Numeric Column (Ascending)
$users = [
['name' => 'Alice', 'age' => 30],
['name' => 'Bob', 'age' => 25],
['name' => 'Charlie', 'age' => 35]
];
// Sort by 'age' ascending
usort($users, function($a, $b) {
return $a['age'] <=> $b['age']; // Spaceship operator (PHP 7+)
});
print_r($users);
Output:
Array
(
[0] => Array ( [name] => Bob [age] => 25 )
[1] => Array ( [name] => Alice [age] => 30 )
[2] => Array ( [name] => Charlie [age] => 35 )
)
Example 2: Sort by Numeric Column (Descending)
usort($users, function($a, $b) {
return $b['age'] <=> $a['age'];
});
print_r($users);
Output:
Array
(
[0] => Array ( [name] => Charlie [age] => 35 )
[1] => Array ( [name] => Alice [age] => 30 )
[2] => Array ( [name] => Bob [age] => 25 )
)
2. Sorting by String Column
Use strcmp()
to sort alphabetically (case-sensitive).
Example 3: Sort by String Column (Ascending)
usort($users, function($a, $b) {
return strcmp($a['name'], $b['name']);
});
print_r($users);
Output:
Array
(
[0] => Array ( [name] => Alice [age] => 30 )
[1] => Array ( [name] => Bob [age] => 25 )
[2] => Array ( [name] => Charlie [age] => 35 )
)
Example 4: Case-Insensitive Sorting
usort($users, function($a, $b) {
return strcasecmp($a['name'], $b['name']);
});
3. Preserving Keys with uasort()
Use uasort()
to maintain key associations.
Example 5: Sort Associative Array by Column
$users = [
'u1' => ['name' => 'Alice', 'age' => 30],
'u2' => ['name' => 'Bob', 'age' => 25],
'u3' => ['name' => 'Charlie', 'age' => 35]
];
uasort($users, function($a, $b) {
return $a['age'] <=> $b['age'];
});
print_r($users);
Output (keys preserved):
Array
(
[u2] => Array ( [name] => Bob [age] => 25 )
[u1] => Array ( [name] => Alice [age] => 30 )
[u3] => Array ( [name] => Charlie [age] => 35 )
)
4. Sorting by Multiple Columns
Sort by age
first, then name
.
Example 6: Multi-Column Sort
usort($users, function($a, $b) {
// First by age, then by name
return [$a['age'], $a['name']] <=> [$b['age'], $b['name']];
});
5. Handling Edge Cases
Example 7: Missing Column Values
Add checks for missing keys:
usort($users, function($a, $b) {
$ageA = $a['age'] ?? 0; // Default to 0 if 'age' doesn't exist
$ageB = $b['age'] ?? 0;
return $ageA <=> $ageB;
});
Example 8: Numeric Strings
Convert string values to numbers:
usort($users, function($a, $b) {
return (int)$a['age'] <=> (int)$b['age'];
});
Summary
usort()
: Sorts a 2D array and reindexes keys.uasort()
: Sorts a 2D array while preserving keys.- Spaceship Operator (`<=>)**: Simplifies numeric/string comparisons (PHP 7+).
strcmp()
/strcasecmp()
: For string comparisons (case-sensitive/insensitive).
By defining a custom comparison function, you can sort 2D arrays by any column!