我有一个数组:
Array
(
...
[14] => Array
(
[date] => 2014-04-14
[period] => 6
)
[15] => Array
(
[date] => 2014-04-21
[period] => R1
)
[16] => Array
(
[date] => 2014-04-21
[period] => R2
)
[17] => Array
(
[date] => 2014-04-21
[period] => 4
)
[18] => Array
(
[date] => 2014-04-21
[period] => 8
)
[19] => Array
(
[date] => 2014-04-28
[period] => 1
)
...
)
它有两种类型的排序:日期和期间。但与此同时,"期间"项的排序是数字和字母。以 2014-04-21 为例:
[15] => Array
(
[date] => 2014-04-21
[period] => R1
)
[16] => Array
(
[date] => 2014-04-21
[period] => R2
)
[17] => Array
(
[date] => 2014-04-21
[period] => 4
)
[18] => Array
(
[date] => 2014-04-21
[period] => 8
)
是否可以按数字排序,然后按字母顺序排序?我需要类似的结果:
[15] => Array
(
[date] => 2014-04-21
[period] => 4
)
[16] => Array
(
[date] => 2014-04-21
[period] => 8
)
[17] => Array
(
[date] => 2014-04-21
[period] => R1
)
[18] => Array
(
[date] => 2014-04-21
[period] => R2
)
我使用此代码:
function cmp($a, $b) {
if ($a['date'] == $b['date']) {
if(is_numeric($a['period']) && !is_numeric($b['period'])) {
return 1;
}
else if(!is_numeric($a['period']) && is_numeric($b['period'])) {
return -1;
}
else {
return ($a['period'] < $b['period']) ? -1 : 1;
}
}
return (strtotime($a['date']) < strtotime($b['date']))? -1 : 1;
}
usort($arr, "cmp");
您应该
在前两个条件下改变方向:
if(is_numeric($a['period']) && !is_numeric($b['period'])) {
return -1;
}
else if(!is_numeric($a['period']) && is_numeric($b['period'])) {
return 1;
}