/**
* 多维数组排序(多用于文件数组数据)
*
* @author Hyber
* @param array $array
* @param array $cols
* @return array
*
* e.g. $data = array_msort($data, array('sort_order'=>SORT_ASC, 'add_time'=>SORT_DESC));
*/
function array_msort($array, $cols) {
$colarr = array();
foreach ($cols as $col => $order) {
$colarr[$col] = array();
foreach ($array as $k => $row) {
$colarr[$col]['_' . $k] = strtolower($row[$col]);
}
}
$eval = 'array_multisort(';
foreach ($cols as $col => $order) {
$eval .= '$colarr[\'' . $col . '\'],' . $order . ',';
}
$eval = substr($eval, 0, -1) . ');';
eval($eval);
$ret = array();
foreach ($colarr as $col => $arr) {
foreach ($arr as $k => $v) {
$k = substr($k, 1);
if (!isset($ret[$k]))
$ret[$k] = $array[$k];
$ret[$k][$col] = $array[$k][$col];
}
}
return $ret;
}
调用事例:
function test(){
$test = array(
array(
'id' => 1,
'addtime' => '5'
),
array(
'id' => 3,
'addtime' => '1'
),
array(
'id' => 2,
'addtime' => '2'
),
array(
'id' => 8,
'addtime' => '0'
),
);
dump(array_msort($test,array('addtime'=>'SORT_DESC')));
}
得到的结果:
Array
(
[0] => Array
(
[id] => 1
[addtime] => 5
)
[2] => Array
(
[id] => 2
[addtime] => 2
)
[1] => Array
(
[id] => 3
[addtime] => 1
)
[3] => Array
(
[id] => 8
[addtime] => 0
)
)