昨天,因为项目的一个二维数组排序给纠结了,今天得好好把array_multisort这个数组函数给讲解下,或是给自己记录下,以免下次又忘记了,好记性不如烂笔头嘛。
bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
从上面手册上给出来的定义可以看出,该函数在返回的是布尔值,成功返回TRUE,失败返回FALSE,因此在使用时无需再赋值给数组变量,同时数组默认的是升序排序。
例一
// 默认为第一个数组按升序排列,成功返回TRUE,失败返回FALSE
// 第一个数组排序后,对应的第二个数组对应索引的值也会排序
$arr1 = array(10, 100, 100, 0);
$arr2 = array(1, 3, 2, 4);
array_multisort($arr1, $arr2);
print_r($arr1);
print_r($arr2);
打印结果为
---------- DEBUG PHP ----------
Array
(
[0] => 0
[1] => 10
[2] => 100
[3] => 100
)
Array
(
[0] => 4
[1] => 1
[2] => 2
[3] => 3
)
输出完成 (耗时 0 秒) - 正常终止
例二
$ar = array(
array( 1, 2, "2", 3, 1),
array("10", 11, 100, 100, "a")
);
// 数组单元一按字符串降序排列
// 数组单元二<span style="font-family: Arial, Helvetica, sans-serif;">(在数组单元一排序好的基础上再)</span>按数字升序排列
array_multisort($ar[0], SORT_DESC, SORT_STRING,
$ar[1], SORT_NUMERIC,SORT_DESC);
print_r($ar);
打印
---------- DEBUG PHP ----------
Array
(
[0] => Array
(
[0] => 3
[1] => 2
[2] => 2
[3] => 1
[4] => 1
)
[1] => Array
(
[0] => 100
[1] => 100
[2] => 11
[3] => 10
[4] => a
)
)
输出完成 (耗时 0 秒) - 正常终止
例三(该例适合从数组中获取数据后排序)
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
foreach ($data as $key => $value) {
$volume[$key] = $value['volume'];
$edition[$key] = $value['edition'];
}
// $volume升序排列,$edition降序排列,同时$data数组以前两个数组的键排序
array_multisort($volume, SORT_ASC, $edition, SORT_DESC, $data);
print_r($volume);
print_r($edition);
print_r($data);
打印
---------- DEBUG PHP ----------
Array
(
[0] => 67
[1] => 67
[2] => 85
[3] => 86
[4] => 86
[5] => 98
)
Array
(
[0] => 7
[1] => 2
[2] => 6
[3] => 6
[4] => 1
[5] => 2
)
Array
(
[0] => Array
(
[volume] => 67
[edition] => 2
)
[1] => Array
(
[volume] => 67
[edition] => 7
)
[2] => Array
(
[volume] => 85
[edition] => 6
)
[3] => Array
(
[volume] => 86
[edition] => 1
)
[4] => Array
(
[volume] => 86
[edition] => 6
)
[5] => Array
(
[volume] => 98
[edition] => 2
)
)
输出完成 (耗时 0 秒) - 正常终止
[update 2014/07/22]
今天算是彻底理解了这个多维数组排序函数,array_multisort函数执行成功后会改变要排序的数组,对于一个二维数组而言,若要针对数组内的某一单元内字段排序,首先要循环该数组,把要排序的字段循环放入一个数组,之后使用该函数进行排序