昨天,因为项目的一个二维数组排序给纠结了,今天得好好把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函数执行成功后会改变要排序的数组,对于一个二维数组而言,若要针对数组内的某一单元内字段排序,首先要循环该数组,把要排序的字段循环放入一个数组,之后使用该函数进行排序