Multidimensional array sorting can be divided into single column sorting and nested sorting. Single column sorting can use the array_multisort() function to sort by columns; nested sorting requires a recursive function to traverse the array and sort. Practical cases include sorting by product name and compound sorting by sales volume and price.
PHP array multi-dimensional sorting practice: from simple to complex scenarios
Introduction
In PHP, sorting multidimensional arrays is usually a complex task. This tutorial will guide you step-by-step through how to sort multi-dimensional arrays based on different scenarios, from simple single-column sorting to complex nested sorting.
Single column sort
The simplest multidimensional array sort is to sort based on a single column. You can use array_multisort()
Function:
$arr = [ ['id' => 1, 'name' => 'John Doe'], ['id' => 3, 'name' => 'Jane Smith'], ['id' => 2, 'name' => 'Bob Johnson'], ]; array_multisort(array_column($arr, 'id'), SORT_ASC, $arr); print_r($arr); // 输出: // Array // ( // [0] => Array // ( // [id] => 1 // [name] => John Doe // ) // [1] => Array // ( // [id] => 2 // [name] => Bob Johnson // ) // [2] => Array // ( // [id] => 3 // [name] => Jane Smith // ) // )
Nested array sort
For nested arrays, you need to use a recursive function to traverse the array And sort them:
function sortNestedArray($arr, $col, $order) { if (!is_array($arr)) { return $arr; } uasort($arr, function($a, $b) use ($col, $order) { if ($a[$col] == $b[$col]) { return 0; } return ($a[$col] < $b[$col]) ? -1 : 1; }); foreach ($arr as &$item) { if (is_array($item)) { $item = sortNestedArray($item, $col, $order); } } return $arr; }
Practical case
Case 1: Sort nested array by product name
$products = [ ['id' => 1, 'name' => 'Apple', 'price' => 10], ['id' => 2, 'name' => 'Orange', 'price' => 15], ['id' => 3, 'name' => 'Banana', 'price' => 5], ]; $sortedProducts = sortNestedArray($products, 'name', SORT_ASC); // ... 处理排序后的数组 ...
Case 2: Compound sorting of nested arrays by sales volume and price
$salesData = [ ['product' => 'Apple', 'count' => 10, 'price' => 10], ['product' => 'Orange', 'count' => 15, 'price' => 15], ['product' => 'Banana', 'count' => 5, 'price' => 5], ]; usort($salesData, function($a, $b) { if ($a['count'] == $b['count']) { return ($a['price'] < $b['price']) ? -1 : 1; } return ($a['count'] < $b['count']) ? 1 : -1; }); // ... 处理排序后的数据 ...
The above is the detailed content of PHP array multi-dimensional sorting practice: from simple to complex scenarios. For more information, please follow other related articles on the PHP Chinese website!