배열 array_multisort

(PHP 4, PHP 5, PHP 7, PHP 8)

array_multisort — 다차원 또는 다차원 배열 정렬


설명

array_multisort(
    array &$array1,
    mixed $array1_sort_order = SORT_ASC,
    mixed $array1_sort_flags = SORT_REGULAR,
    mixed ...$rest
): bool
                

array_multisort()는 한 번에 여러 배열을 정렬하거나 다차원 배열을 하나 이상의 차원으로 정렬하는 데 사용할 수 있습니다.

연관(문자열) 키는 유지되지만 숫자 키는 다시 색인화됩니다.

메모: 두 구성원이 같은 것으로 비교되면 원래 순서를 유지합니다. PHP 8.0.0 이전에는 정렬된 배열의 상대적 순서가 정의되지 않았습니다.

메모: 배열의 내부 포인터를 첫 번째 요소로 재설정합니다.


매개변수

array1
정렬 중인 배열입니다.
array1_sort_order
이전 배열 인수를 정렬하는 데 사용되는 순서입니다. SORT_ASC를 사용하여 오름차순으로 정렬하거나 SORT_DESC를 사용하여 내림차순으로 정렬합니다.

이 인수는 array1_sort_flags로 바꾸거나 완전히 생략할 수 있습니다. 이 경우 SORT_ASC가 가정됩니다.

array1_sort_flags
이전 배열 인수에 대한 정렬 옵션:

정렬 유형 플래그:

  • SORT_REGULAR - 항목을 정상적으로 비교합니다(유형을 변경하지 않음).
  • SORT_NUMERIC - 항목을 숫자로 비교
  • SORT_STRING - 항목을 문자열로 비교
  • SORT_LOCALE_STRING - 현재 로케일을 기반으로 항목을 문자열로 비교합니다. setlocale()을 사용하여 변경할 수 있는 로케일을 사용합니다.
  • SORT_NATURAL - natsort()와 같은 "자연 순서"를 사용하여 항목을 문자열로 비교
  • SORT_FLAG_CASE - 대소문자를 구분하지 않고 문자열을 정렬하기 위해 SORT_STRING 또는 SORT_NATURAL과 결합(비트 OR)할 수 있습니다.

이 인수는 array1_sort_order로 바꾸거나 완전히 생략할 수 있습니다. 이 경우 SORT_REGULAR가 가정됩니다.

rest
더 많은 배열, 선택적으로 정렬 순서와 플래그가 뒤따릅니다. 이전 배열의 동등한 요소에 해당하는 요소만 비교됩니다. 즉, 정렬은 사전순입니다.

반환 값

성공하면 true를, 실패하면 false를 반환합니다.


Examples

예제 #1 여러 배열 정렬

                  
<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);

var_dump($ar1);
var_dump($ar2);
?>
                  
                

이 예에서 정렬 후 첫 번째 배열은 0, 10, 100, 100을 포함합니다. 두 번째 배열은 4, 1, 2, 3을 포함합니다. 두 번째 배열의 항목은 첫 번째 배열의 동일한 항목(100 및 100)도 정렬되었습니다.

array(4) {
  [0]=> 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)
}
                

예제 #2 다차원 배열 정렬

                  
<?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);
?>
                  
                

이 예에서 정렬 후 첫 번째 배열은 "10", 100, 100, 11, "a"로 변환됩니다(오름차순으로 문자열로 정렬됨). 두 번째는 1, 3, "2", 2, 1을 포함합니다(숫자로 내림차순으로 정렬됨).

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)
  }
}
                

예제 #3 데이터베이스 결과 정렬

이 예에서 데이터 배열의 각 요소는 테이블의 한 행을 나타냅니다. 이 유형의 데이터 세트는 데이터베이스 레코드의 일반적인 유형입니다.

예시 데이터:

volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7
                

데이터라고 하는 배열로서의 데이터. 이것은 일반적으로 예를 들어 mysqli_fetch_assoc()로 루핑하여 얻을 수 있습니다.

                  
<?php
$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);
?>
                  
                

이 예에서는 볼륨 내림차순, 에디션 오름차순으로 주문합니다.

행 배열이 있지만 array_multisort()에는 열 배열이 필요하므로 아래 코드를 사용하여 열을 얻은 다음 정렬을 수행합니다.

                  
<?php
// Obtain a list of columns
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

// you can use array_column() instead of the above code
$volume  = array_column($data, 'volume');
$edition = array_column($data, 'edition');

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
                  
                

이제 데이터세트가 정렬되고 다음과 같이 표시됩니다.

volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7
                

예제 #4 대소문자를 구분하지 않는 정렬

SORT_STRINGSORT_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
)
                

기타