The array magic multi-dimensional sorting technology in PHP uses the __callStatic() method to achieve complex multi-dimensional array sorting. 1. Create a sorting function array, containing the sorting function for each field. 2. Sort the array using a custom sort function. 3. Return the sorted array. Practical case: Sort a multi-dimensional array by age in ascending order and name in descending order, and output the sorted results.
PHP Array Magic Multidimensional Sorting: A powerful tool for implementing complex sorting
Introduction
In PHP, arrays are the basic structure for storing and organizing data. Sorting can be a complex task when dealing with multidimensional arrays. This tutorial will introduce a technique called Array Magic Multidimensional Sort, which provides a powerful method for complex sorting of multidimensional arrays.
Magic Methods
The array magic methods in PHP allow you to override the built-in sorting and comparison methods of arrays. To implement multidimensional sorting, we will use the __callStatic()
method, which allows you to call a static method on a class even if the method does not exist.
In the following example, we create a Multisort
class that overrides the array_multisort()
method:
class Multisort { public static function __callStatic($method, $args) { // 检查方法名称是否是 "array_multisort" if ($method === "array_multisort") { // 创建一个排序函数数组 $sortFns = []; // 遍历排序参数 foreach ($args as $key => $field) { // 获取排序方式 $direction = isset($args[$key + 1]) ? $args[$key + 1] : SORT_ASC; // 创建排序函数 $sortFns[] = function($a, $b) use ($field, $direction) { return strnatcmp($a[$field], $b[$field]) * $direction; }; } // 使用自定义排序函数对数组进行排序 usort($args[0], $sortFns); // 返回排序后的数组 return $args[0]; } throw new BadMethodCallException("Method $method does not exist."); } }
Practical case
The following is a practical case for the Multisort
class, which is used to sort multi-dimensional arrays containing multiple fields:
$data = [ ['name' => 'John', 'age' => 30, 'score' => 85], ['name' => 'Alice', 'age' => 25, 'score' => 90], ['name' => 'Bob', 'age' => 35, 'score' => 80], ]; // 按年龄升序,然后按姓名降序排序 $sortedData = Multisort::array_multisort($data, 'age', SORT_ASC, 'name', SORT_DESC); // 输出排序后的数据 print_r($sortedData);
This code will output The sorted data is as follows:
Array ( [0] => Array ( [name] => Alice [age] => 25 [score] => 90 ) [1] => Array ( [name] => Bob [age] => 35 [score] => 80 ) [2] => Array ( [name] => John [age] => 30 [score] => 85 ) )
The above is the detailed content of PHP array magic multidimensional sorting: a powerful tool for implementing complex sorting. For more information, please follow other related articles on the PHP Chinese website!