本文实例讲述了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程序设计有所帮助。