Home  >  Article  >  Backend Development  >  PHP multi-dimensional array sorting, maintaining index correspondence, clever use of uasort_PHP tutorial

PHP multi-dimensional array sorting, maintaining index correspondence, clever use of uasort_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:30:111030browse

In actual development, you will more or less encounter array sorting problems. In addition to conventional simple sorting algorithms, PHP also provides built-in array sorting functions. This time we will focus on sharing: uasort uses user-defined comparison functions to sort arrays. Sort the values ​​and maintain the index association, which can sort multi-dimensional arrays. This article focuses on this function. ​​

uasort function
Parameter type: bool uasort (array &$array, callable $cmp_function)
This function sorts the array and maintains the association between index and cell.
Mainly used for sorting associative arrays where the order of units is important. The comparison function is user-defined.
Returns TRUE on success, or FALSE on failure.
Array sorting example (not in class):
Copy code
1 /**
2 * Custom sorting function
3 * @param $param1
4 * @param $param2
5 * @return 0 (no movement) 1 (forward swap sequence) -1 (reverse swap sequence)
6*/
7
8 function my_sort($param1, $param2){
9 if($param1 == $param2) return 0;
10 else return $param1 > $param2 ? 1 : -1;
11 }
12
13 $arr = array(
14           'a'=>'20',
15 'b'=>'1',
16 'c'=>'10',
17 'd'=>'5',
18 'e'=>'21',
19 'f'=>'4',
20           'g'=>'3',
21 );
22
23 uasort($arr, 'my_sort');
24
25 var_dump($arr);
26
27 /*Output value
28 array (size=7)
29 'b' => string '1' (length=1)
30 'g' => string '3' (length=1)
31 'f' => string '4' (length=1)
32 'd' => string '5' (length=1)
33 'c' => string '10' (length=2)
34 'a' => string '20' (length=2)
35 'e' => string '21' (length=2)
36 */
Copy code
Multidimensional array sorting example (not in class):
Copy code
/**
* Custom sorting function
* @param $param1
* @param $param2
* @return 0 (no movement) 1 (forward swap sequence) -1 (reverse swap sequence)
*/
function my_sort($param1, $param2){
if($param1['value'] == $param2['value']) return 0;
else return $param1['value'] > $param2['value'] ? 1 : -1;
}
$arr = array(
          'a'=>array('key'=>'Definition 1', 'value'=>'20'),
          'b'=>array('key'=>'Definition 2', 'value'=>'1'),
          'c'=>array('key'=>'Definition 3', 'value'=>'10'),
          'd'=>array('key'=>'definition 4', 'value'=>'5'),
          'e'=>array('key'=>'Definition 5', 'value'=>'21'),
          'f'=>array('key'=>'Definition 6', 'value'=>'4'),
          'g'=>array('key'=>'Definition 7', 'value'=>'3'),
);
uasort($arr, 'my_sort');
var_dump($arr);
/*输出值
array (size=7)
  'b' => 
    array (size=2)
      'key' => string '定义2' (length=7)
      'value' => string '1' (length=1)
  'g' => 
    array (size=2)
      'key' => string '定义7' (length=7)
      'value' => string '3' (length=1)
  'f' => 
    array (size=2)
      'key' => string '定义6' (length=7)
      'value' => string '4' (length=1)
  'd' => 
    array (size=2)
      'key' => string '定义4' (length=7)
      'value' => string '5' (length=1)
  'c' => 
    array (size=2)
      'key' => string '定义3' (length=7)
      'value' => string '10' (length=2)
  'a' => 
    array (size=2)
      'key' => string '定义1' (length=7)
      'value' => string '20' (length=2)
  'e' => 
    array (size=2)
      'key' => string '定义5' (length=7)
      'value' => string '21' (length=2)
*/
复制代码
 
 
 
 
 
 
class中排序,为了方便以二维数组为例:
 
uasort($arr1, array($this, 'public_my_sort'));
 
uasort($arr2, array('self', 'self_my_sort'));
 
复制代码
class myClassSort{
    
    /**
* Sorting main method
* @param $arr1 self static sorting
* @param $arr2 this sorting
* @return sorted array
*/
    public function main($arr1 = array(), $arr2 = array()){
    
        uasort($arr1, array($this, 'public_my_sort'));
        
        uasort($arr2, array('self', 'self_my_sort'));
        
        return array('arr1'=>$arr1, 'arr2'=>$arr2);
    
    }
    
    /**
* Custom sorting function
* @param $param1
* @param $param2
* @return 0 (no movement) 1 (forward swap sequence) -1 (reverse swap sequence)
*/
    private static function self_my_sort($param1, $param2){
        if($param1['value'] == $param2['value']) return 0;
        else return $param1['value'] > $param2['value'] ? 1 : -1;
    }
    
    
    //同上
    public function public_my_sort($param1, $param2){
        if($param1['value'] == $param2['value']) return 0;
        else return $param1['value'] > $param2['value'] ? 1 : -1;
    }
    
}
 
$arr = array(
            'a'=>array('key'=>'定义1', 'value'=>'20'),
            'b'=>array('key'=>'定义2', 'value'=>'1'),
            'c'=>array('key'=>'定义3', 'value'=>'10'),
          'd'=>array('key'=>'definition 4', 'value'=>'5'),
          'e'=>array('key'=>'Definition 5', 'value'=>'21'),
          'f'=>array('key'=>'Definition 6', 'value'=>'4'),
          'g'=>array('key'=>'Definition 7', 'value'=>'3'),
);
$myClassSort = new myClassSort();
var_dump($myClassSort->main($arr, $arr));
/*The output result is the same as the above example*/
Copy code
Similar function extension
array_multisort sorts multiple arrays or multi-dimensional arrays, but the final filling is still a specific one-dimensional array
arsort sorts the one-dimensional array in reverse order and maintains the index relationship, maintaining the index correspondence
asort sorts the one-dimensional array forward and maintains the index relationship, maintaining the index correspondence
krsort sorts the array in reverse order by key name, maintaining the index correspondence
ksort sorts the array forward by key name and maintains the index correspondence
natcasesort uses the "natural sorting" algorithm to sort one-dimensional arrays in a case-insensitive manner. It can be used to sort alphanumeric mixed situations in the array content and maintain index correspondence
natsort uses the "natural sorting" algorithm to sort one-dimensional arrays, distinguishing between uppercase and lowercase letters, and can be used to sort alphanumeric mixed situations in the array content, maintaining the index correspondence
rsort reversely sorts a one-dimensional array without maintaining index correspondence
sort sorts the one-dimensional array forward, without maintaining the index correspondence
uasort uses a user-defined comparison function to sort the values ​​in the array and maintain index association. It can sort multi-dimensional arrays. This article focuses on this function
uksort uses a user-defined comparison function to sort the keys in the array
usort uses a user-defined comparison function to sort the values ​​in the array without maintaining index association

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/767108.htmlTechArticleIn actual development, you will more or less encounter array sorting problems. In addition to writing simple sorting algorithms, PHP also provides built-in array sorting functions. This time I will focus on sharing: uas...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn