假如有个一维数组为:
$array = array(
0 => array(
'id' => 1,
'sort' => 3,
'times' => 34,
),
1 => array(
'id' => 2,
'sort' => 23,
'times' => 23,
),
2 => array(
'id' => 8,
'sort' => 3,
'times' => 32,
),
3 => array(
'id' => 5,
'sort' => 54,
'times' => 12,
),
4 => array(
'id' => 4,
'sort' => 11,
'times' => 22,
),
5 => array(
'id' => 6,
'sort' => 22,
'times' => 34,
),
6 => array(
'id' => 9,
'sort' => 23,
'times' => 56,
),
);
然后对这数组首先按 sort 降序排序,接着在相同sort值得情况下按id升序排序,以下有两种方法:
方法一:利用for循环进行对第二个键值进行排序,如果用于几十万的数据效率不高,不推荐用在数据量大的数组里;
//根据数组某个键值所对应的值来排序
//这里$array数组先按sort降序排序,接着在相同sort值得情况下按id升序排序
$orderArr = array();
foreach($array as $key=>$val) {
$orderArr[$key]['sort'] = $val['sort'];
}
array_multisort($orderArr, SORT_DESC, $array); //对数组进行sort降序排序
for($i = 0; $i < count($array) - 1; $i++)
{
for($j = $i; $j < count($array); $j++)
{
if($array[$i]['sort'] == $array[$j]['sort'] && $array[$i]['id'] > $array[$j]['id'])
{
$temp = array();
$temp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $temp;
}
}
}
print_r($array);
方法二:利用array()本身自带的函数进行排序,效率比上个高的多,可以用于几十万以上的数据处理;强烈推荐使用这种
//根据数组某个键值所对应的值来排序
//这里$array数组先按sort降序排序,接着在相同sort值得情况下按id升序排序
$orderArr = array();
foreach($array as $key=>$val) {
$orderArr[$key]['sort'] = $val['sort'];
}
array_multisort($orderArr, SORT_DESC, $array, SORT_DESC); //对数组进行sort降序排序,然后再对数组中的第一个键值的数值(id)进行升序排序;如果想sort排序完后接着按times排序,就应该将times设为数组的第一个键值
print_r($array);
打印结果:
Array
(
[0] => Array
(
[id] => 5
[sort] => 54
[times] => 12
)
[1] => Array
(
[id] => 9
[sort] => 23
[times] => 56
)
[2] => Array
(
[id] => 2
[sort] => 23
[times] => 23
)
[3] => Array
(
[id] => 6
[sort] => 22
[times] => 34
)
[4] => Array
(
[id] => 4
[sort] => 11
[times] => 22
)
[5] => Array
(
[id] => 1
[sort] => 3
[times] => 34
)
[6] => Array
(
[id] => 8
[sort] => 3
[times] => 32
)
)