本文实例讲述了php专用数组排序类ArraySortUtil用法。分享给大家供大家参考。具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
** * ArraySortUtil is a array sort utility, you can extends the sorting engine. * * @version 0.1 * @package utility.sort */ class ArraySortUtil { static function uasort( $unsort , $fields ) { if ( ! is_array ( $unsort ) || sizeof( $unsort ) <= 0 ) return $unsort ; $sorted = uasortEngine::uasort( $unsort , $fields ); return $sorted ; } static function multisort( $unsort , $fields ) { if ( ! is_array ( $unsort ) || sizeof( $unsort ) <= 0 ) return $unsort ; $sorted = multisortEngine::multisort( $unsort , $fields ); return $sorted ; } } class multisortEngine { static function multisort( $unsort , $fields ) { $sorted = $unsort ; if ( is_array ( $unsort )) { $loadFields = array (); foreach ( $fields as $sortfield ) { $loadFields [ "field" ][] = array ( "name" => $sortfield [ "field" ], "order" => $sortfield [ "order" ], "nature" => $sortfield [ "nature" ], "caseSensitve" => $sortfield [ "caseSensitve" ] ); $loadFields [ "data" ][ $field [ "field" ]] = array (); } // Obtain a list of columns foreach ( $sorted as $key => $row ) { foreach ( $loadFields [ "field" ] as $field ) { $value = $row [ $field [ "name" ]]; $loadFields [ "data" ][ $field [ "name" ]][ $key ] = $value ; } } $parameters = array (); foreach ( $loadFields [ "field" ] as $sortfield ) { $array_data = $loadFields [ "data" ][ $sortfield [ "name" ]]; $caseSensitve = ( $sortfield [ "caseSensitve" ] == null ) ? $sortfield [ "caseSensitve" ] : false; if (! $caseSensitve ) $array_data = array_map ( 'strtolower' , $array_data ); $parameters [] = $array_data ; if ( $sortfield [ "order" ] != null ) $parameters [] = ( $sortfield [ "order" ] ) ? SORT_DESC : SORT_ASC; if ( $sortfield [ "nature" ] != null ) $parameters [] = ( $sortfield [ "nature" ] ) ? SORT_REGULAR : SORT_STRING; } $parameters [] = & $sorted ; call_user_func_array( "array_multisort" , $parameters ); } return $sorted ; } } class uasortEngine { static private $caseSensitve = false; static private $sortfields = array (); static private $sortorder = true; static private $nature = false; static private function uasort_callback(& $a , & $b ) { foreach (self:: $sortfields as $sortfield ) { $_field = $sortfield [ "field" ]; $_order = isset( $sortfield [ "order" ]) ? $sortfield [ "order" ] : self:: $sortorder ; $_caseSensitve = isset( $sortfield [ "caseSensitve" ]) ? $sortfield [ "caseSensitve" ] : self:: $caseSensitve ; $_nature = isset( $sortfield [ "nature" ]) ? $sortfield [ "nature" ] : self:: $nature ; if ( $_field != "" ) { $retval = 0; if ( $_nature ) { if ( $_caseSensitve ) { $compare = strnatcmp ( $a [ $_field ], $b [ $_field ]); } else { $compare = strnatcasecmp ( $a [ $_field ], $b [ $_field ]); } } else { if ( $_caseSensitve ) { $compare = strcmp ( $a [ $_field ], $b [ $_field ]); } else { $compare = strcasecmp ( $a [ $_field ], $b [ $_field ]); } } if ( $compare !== 0 && ! $_order ) $compare = ( $compare > 0) ? -1 : 1; } if ( $compare !== 0) break ; } return $compare ; } static function uasort( $unsort , $fields ) { self:: $sortfields = $fields ; $sorted = $unsort ; uasort( $sorted , array ( 'uasortEngine' , 'uasort_callback' )); return $sorted ; } } |
使用范例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?php require_once ( 'class.ArraySortUtil.php' ); // declare test data $assetData [] = array ( "id" => 1, "category" => "Hardware" , "subcategory" => "Personal Computer" , "supplier" => "DELL" , "particular" => "Vostro 1320" , "purchase_price" =>2300, "other_charges" =>500); $assetData [] = array ( "id" => 2, "category" => "Hardware" , "subcategory" => "Personal Computer" , "supplier" => "DELL" , "particular" => "Vostro 1420" , "purchase_price" =>2500, "other_charges" =>0); $assetData [] = array ( "id" => 3, "category" => "Hardware" , "subcategory" => "Laptop" , "supplier" => "DELL" , "particular" => "Vostro 1520" , "purchase_price" =>4500, "other_charges" =>100); $assetData [] = array ( "id" => 4, "category" => "Hardware" , "subcategory" => "Laptop" , "supplier" => "Acer" , "particular" => "Apire One" , "purchase_price" =>2500, "other_charges" =>200); $assetData [] = array ( "id" => 5, "category" => "Furniture" , "subcategory" => "Table" , "supplier" => "CHEN" , "particular" => "Manager Table" , "purchase_price" =>1000, "other_charges" =>0); $assetData [] = array ( "id" => 6, "category" => "Furniture" , "subcategory" => "Table" , "supplier" => "CHEN" , "particular" => "Staff Table" , "purchase_price" =>500, "other_charges" =>0); $assetData [] = array ( "id" => 7, "category" => "Furniture" , "subcategory" => "Chair" , "supplier" => "CHEN" , "particular" => "Staff Chair" , "purchase_price" =>500, "other_charges" =>0); $sorted = ArraySortUtil::multisort( $assetData , array ( array ( "field" => "category" ), array ( "field" => "subcategory" , "order" => true) // desc )); echo "<h1>multisort:result</h1>" ; echo "<pre>" ; print_r( $sorted ); echo "</pre>" ; $sorted = ArraySortUtil::uasort( $assetData , array ( array ( "field" => "category" ), array ( "field" => "subcategory" , "order" => true) // desc )); echo "<h1>uasort:result</h1>" ; echo "<pre>" ; print_r( $sorted ); echo "</pre>" ; |
希望本文所述对大家的php程序设计有所帮助。