함수 bool array_multisort (array &$arr [, Mixed $arg = SORT_ASC [, Mixed $arg = SORT_REGULAR [, Mixed $...]]] )
매개변수 설명: 이 함수는 여러 배열 또는 다차원 배열을 정렬합니다. Sort
첫 번째 매개변수는 배열이고 각 후속 매개변수는 배열이거나 다음 정렬 순서 플래그일 수 있습니다.
SORT_ASC - 기본값, 오름차순으로 정렬
SORT_DESC - 내림차순으로 정렬
다음을 수행할 수 있습니다. 그런 다음 정렬 유형
SORT_REGULAR(기본값)을 지정합니다. 각 항목을 규칙적인 순서로 배열하세요.
SORT_NUMERIC - 각 항목을 숫자순으로 정렬합니다.
SORT_STRING - 각 항목을 알파벳순으로 정렬합니다.
예제 코드
$arr1 = array('10', 11, 100, 100, 'a'); $arr2 = array(1, 2, 3, '2', 5); array_multisort($arr1, $arr2);
결과는 다음과 같습니다.
$arr1
Array ( [0] => 10 [1] => a [2] => 11 [ 3 ] => 100 [4] => 100 )
# '10'은 11, 100, 100과 비교하면 정수 10으로 변환되는데, 이는 다른 세 숫자보다 작습니다.
# '10 '가 'a'에 있음 문자열로 비교하면 첫 번째 문자 '1'의 ASCII 코드 값은 49로 'a'(ASCII 값은 97)보다 작으므로 '10'이 가장 작은 요소입니다. ># 'a'는 다른 세 숫자의 비교에 속함 이면 다른 세 숫자보다 작은 정수 0으로 변환됩니다.
$arr2
Array ( [0] => 1 [ 1] => 5 [2] => 2 [3] => 2 [4] => 3 )
# $arr2 요소 1은 $arr1 요소 '10' 위치에 해당합니다. [0] 위치
# $arr1[2] => 100, $arr1[ 3] => 100은 각각 $arr2 요소 3과 '2'에 해당합니다. 3은 '2'보다 크므로 2에 해당하는 $arr1[2] => 100의 정렬된 첨자는
3이고, 3에 해당하는 $arr1[3] => 100의 정렬된 첨자는 4입니다.
요약
1. 정렬에 참여하는 배열 요소의 개수는 동일합니다.
2. 정렬된 배열 요소의 위치는 예를 들어 '10' => 1 , 11 => 2 <🎜 입니다. >3. 다음 배열 이전 배열의 순서에 따라 정렬
4. 이전 배열에서 동일한 요소가 발견되면 다음 배열을 비교합니다.
array_multisort — 여러 배열 또는 다차원 배열 정렬
설명
bool array_multisort ( array $ar1 [, Mixed $arg [, Mixed $... [, array $... ]]] )
성공 시 TRUE를 반환하고, 실패 시 FALSE를 반환합니다. .
array_multisort()는 여러 배열을 한 번에 정렬하거나 하나 이상의 차원에 따라 다차원 배열을 정렬하는 데 사용할 수 있습니다.
연관된(문자열) 키 이름은 변경되지 않지만 숫자 키 이름은 다시 색인화됩니다.
입력 배열은 테이블 열로 처리되고 행별로 정렬됩니다. 이는 SQL의 ORDER BY 절 기능과 유사합니다. 첫 번째 배열은 정렬할 기본 배열입니다. 배열의 행(값)이 동일한 것으로 비교되면 다음 입력 배열의 해당 값 크기에 따라 정렬됩니다.
이 함수의 매개변수 구조는 다소 특이하지만 매우 유연합니다. 첫 번째 매개변수는 배열이어야 합니다. 다음 각 인수는 아래 나열된 배열 또는 정렬 플래그일 수 있습니다.
정렬 순서 플래그:
SORT_ASC - 오름차순 정렬
SORT_DESC - 내림차순 정렬
정렬 유형 플래그:
SORT_REGULAR - 정렬 내림차순으로 항목은 일반적인 방법에 따라 비교됩니다.
SORT_NUMERIC - 항목은 숫자 값에 따라 비교됩니다.
SORT_STRING - 항목은 문자열에 따라 비교됩니다.
다음에는 두 개의 유사한 정렬 플래그를 지정할 수 없습니다. 각 배열. 각 배열 뒤에 지정된 정렬 플래그는 해당 배열에만 유효합니다. 그 이전에는 기본값 SORT_ASC 및 SORT_REGULAR입니다.
#1 여러 배열 정렬
<?php $ar1 = array("10", 100, 100, "a"); $ar2 = array(1, 3, "2", 1); array_multisort($ar1, $ar2); var_dump($ar1); var_dump($ar2); ?>
array(4) { [0]=> string(2) "10" [1]=> string(1) "a" [2]=> int(100) [3]=> int(100) } array(4) { [0]=> int(1) [1]=> int(1) [2]=> string(1) "2" [3]=> int(3) }
<?php $ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1)); array_multisort ($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); ?>
#3 다차원 배열 정렬
<?php $ar = array( array("10", 11, 100, 100, "a"), array( 1, 2, "2", 3, 1) ); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); var_dump($ar); ?>
array(2) { [0]=> 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) } }
#4 对数据库结果进行排序
本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。
例子中的数据如下:
volume | edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()。
$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);
?>
本例中将把 volume 降序排列,把 edition 升序排列。
现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。
// 取得列的列表
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
数据集合现在排好序了,结果如下:
volume | edition
-------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7
Example #5 不区分大小写字母排序
SORT_STRING 和 SORT_REGULAR 都是区分大小写字母的,大写字母会排在小写字母之前。
要进行不区分大小写的排序,就要按照原数组的小写字母拷贝来排序。
<?php $array = array('Alpha', 'atomic', 'Beta', 'bank'); $array_lowercase = array_map('strtolower', $array); array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array); print_r($array); ?>
以上例程会输出:
Array
(
[0] => Alpha
[1] => atomic
[2] => bank
[3] => Beta
)
【译者注】本函数相当有用,为有助于理解,请再看下面这个例子:
Example #6 名次排列
<?php $grade = array("score" => array(70, 95, 70.0, 60, "70"), "name" => array("Zhang San", "Li Si", "Wang Wu", "Zhao Liu", "Liu Qi")); array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC, // 将分数作为数值,由高到低排序 $grade["name"], SORT_STRING, SORT_ASC); // 将名字作为字符串,由小到大排序 var_dump($grade); ?>
以上例程会输出:
array(2) {
["score"]=>
array(5) {
[0]=>
int(95)
[1]=>
string(2) "70"
[2]=>
float(70)
[3]=>
int(70)
[4]=>
int(60)
}
["name"]=>
array(5) {
[0]=>
string(5) "Li Si"
[1]=>
string(6) "Liu Qi"
[2]=>
string(7) "Wang Wu"
[3]=>
string(9) "Zhang San"
[4]=>
string(8) "Zhao Liu"
}
}
本例中对包含成绩的数组 $grade 按照分数(score)由高到低进行排序,分数相同的人则按照名字(name)由小到大排序。排序后李四 95 分为第一名,赵六 60 分为第五名没有异议。张三、王五和刘七都是 70 分,他们的名次则由其姓名的字母顺序排列,Liu 在前,Wang 在后而 Zhang 在最后。为了区别,三个 70 分分别用了整数,浮点数和字符串来表示,可以在程序输出中清楚地看到它们排序的结果。
更多PHP array_multisort()函数的使用札记相关文章请关注PHP中文网!