array_multisort 对多个数组或多维数组进行排序 &reftitle.description; boolarray_multisort arrayarray1 mixedarray1_sort_orderSORT_ASC mixedarray1_sort_flagsSORT_REGULAR mixedrest array_multisort 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。 关联(string)键名保持不变,但数字键名会被重新索引。 ¬e.sort-unstable; &reftitle.parameters; ¬e.reset-index; array1 要排序的 array array1_sort_order 之前 array 参数要排列的顺序。 SORT_ASC 按照上升顺序排序, SORT_DESC 按照下降顺序排序。 此参数可以和 array1_sort_flags 互换,也可以完全删除,默认是 SORT_ASC array1_sort_flags array 参数设定选项: 排序类型标志: SORT_REGULAR - 将项目按照通常方法比较(不修改类型) SORT_NUMERIC - 按照数字大小比较 SORT_STRING - 按照字符串比较 SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale 修改此信息。 SORT_NATURAL - 以字符串的"自然排序",类似 natsort SORT_FLAG_CASE - 可以组合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小写不敏感的方式排序字符串。 参数可以和 array1_sort_order 交换或者省略,默认情况下是 SORT_REGULAR rest 可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。 &reftitle.returnvalues; &return.success; &reftitle.examples; 多个数组排序 ]]> 这个例子里,排序后,第一个数组会包含 0、 10、 100、 100。 第二个数组会包含 4、1、 2、 3。 第二个数组里的项目对应第一个数组后也进行了排序(100 和 100)。 int(0) [1]=> int(10) [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(4) [1]=> int(1) [2]=> int(2) [3]=> int(3) } ]]> 排序多维数组 ]]> 本例中在排序后,第一个数组将变成 "10",100,100,11,"a"(被当作字符串以升序排列)。第二个数组将包含 1, 3, "2", 2, 1(被当作数字以降序排列)。 array(5) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) "a" } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(2) [4]=> int(1) } } ]]> 对数据库结果进行排序 本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。 例子中的数据如下: 数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc 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); ?> ]]> 本例中将把 volume 降序排列,把 edition 升序排列。 现在有了包含有行的数组,但是 array_multisort 需要一个包含列的数组,因此用以下代码来取得列,然后排序。 $row) { $volume[$key] = $row['volume']; $edition[$key] = $row['edition']; } // 你可以使用 array_column() 代替上面的代码 $volume = array_column($data, 'volume'); $edition = array_column($data, 'edition'); // 将数据根据 volume 降序排列,根据 edition 升序排列 // 把 $data 作为最后一个参数,以通用键排序 array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); ?> ]]> 数据集合现在排好序了,结果如下: 不区分大小写字母排序 SORT_STRINGSORT_REGULAR 都是区分大小写字母的,大写字母会排在小写字母之前。 要进行不区分大小写的排序,就要按照原数组的小写字母拷贝来排序。 ]]> &example.outputs; Alpha [1] => atomic [2] => bank [3] => Beta ) ]]> &reftitle.seealso; usort &seealso.array.sorting;