찾다

 >  Q&A  >  본문

PHP에서 배열과 데이터를 정렬하는 방법은 무엇입니까?

이 질문은 PHP의 배열 정렬 문제에 대한 참고 자료로 작성되었습니다. 귀하의 특정 사례가 독특하고 새로운 질문을 받을 가치가 있다고 생각하기 쉽지만 대부분은 실제로 이 페이지에 있는 솔루션 중 하나를 약간 변형한 것입니다.

이 질문과 중복되어 질문이 종료된 경우 아래의 모든 질문과 크게 다른 이유를 설명할 수 있는 경우에만 질문을 다시 열어달라고 요청하세요.

PHP에서 배열을 정렬하는 방법은 무엇입니까?

PHP에서 복잡한 배열을 정렬하는 방법은 무엇입니까?

PHP에서 객체 배열을 정렬하는 방법은 무엇입니까?


  1. 기본 1차원 배열이 포함되어 있습니다. 다차원 배열 포함 객체 배열에는 다음이 포함됩니다. 다른 배열을 기반으로 한 배열 정렬

  2. SPL 정렬 사용

  3. 안정적인 정렬

PHP의 기존 함수를 사용한 실용적인 답변은 1을 참조하고, 정렬 알고리즘(PHP 함수가 구현하고 매우 복잡한 경우에 필요할 수 있음)에 대한 학술적으로 자세한 답변은 2를 참조하세요.

P粉068174996P粉068174996437일 전686

모든 응답(2)나는 대답할 것이다

  • P粉476475551

    P粉4764755512023-10-18 13:03:18

    알겠습니다. deceze에서는 대부분의 기본 방법을 다루었습니다. 다른 유형의 정렬도 살펴보겠습니다

    SPL을 사용하여 정렬

    SplHeap

    으아아아

    출력

    으아아아

    SplMaxHeap

    SplMaxHeap 클래스는 힙의 주요 기능을 제공하여 최대값을 맨 위에 유지합니다.

    으아아아

    SplMinHeap

    으아아아

    다른 유형의 정렬

    버블 정렬

    버블 정렬에 관한 Wikipedia 기사에서 발췌:

    으아아아

    정렬 선택

    선택 정렬에 관한 Wikipedia 기사에서 발췌:

    으아아아

    삽입 정렬

    삽입 정렬에 관한 Wikipedia 기사에서 발췌:

    으아아아

    힐 정렬

    Shellsort에 관한Wikipedia 기사에서 발췌:

    으아아아

    빗 분류

    빗 정렬에 관한Wikipedia 기사에서 발췌:

    으아아아

    병합 정렬

    병합 정렬에 관한 Wikipedia 기사에서:

    으아아아

    빠른 정렬

    빠른 정렬에 관한 Wikipedia 기사에서 발췌:

    으아아아

    정렬 및 정렬

    정렬에 관한 Wikipedia 기사에서 발췌:

    으아아아

    기수 정렬

    기수 정렬에 관한Wikipedia 기사에서 발췌:

    으아아아

    회신하다
    0
  • P粉952365143

    P粉9523651432023-10-18 09:01:08

    기본 1차원 배열

    으아아아

    적용 가능한 정렬 기능:

    • 排序
    • 排序
    • 分类
    • 排序
    • natsort
    • natcasesort
    • ksort
    • krsort

    둘 사이의 유일한 차이점은 키-값 연관을 유지할지 여부입니다("a”函数),是否按从低到高排序或反向排序(“r” >”),是否对值或键进行排序(“k”)以及如何比较值(“nat" 대 일반). 개요와 자세한 내용에 대한 링크는 http://php.net/manual/en/array.sorting.php를 참조하세요.

    객체 배열을 포함한 다차원 배열

    으아아아

    각 항목의 키 "foo"를 누르려면 $array进行排序,则需要一个自定义比较函数。上面的 sort 및 관련 기능이 비교 및 ​​정렬 방법을 알고 있는 간단한 값에 대해 작동합니다. PHP는 array('foo' => 'bar', 'baz' => 42);와 같은 복잡한 값을 처리하는 방법을 단순히 "알지" 못하므로 이를 알려주어야 합니다.

    이렇게 하려면 비교 함수를 만들어야 합니다. 이 함수는 두 개의 요소를 허용하며 요소가 동일한 것으로 간주되는 경우 첫 번째 값이 더 높으면 0;如果第一个值较低,则必须返回低于 0 的值;如果认为第一个值低于 0,则必须返回高于 0 的值를 반환해야 합니다. 이것이 전부입니다:

    으아아아

    일반적으로 익명 함수를 콜백으로 사용하는 것이 좋습니다. 메서드나 정적 메서드를 사용하려면 PHP에서 콜백을 지정하는 다른 방법을 참조하세요.

    그런 다음 다음 기능 중 하나를 사용할 수 있습니다:

    다시 말하지만, 키-값 연관이 유지되는지 여부와 값 또는 키별로 정렬되는지 여부만 다릅니다. 자세한 내용은 해당 설명서를 읽어보세요.

    사용 예:

    으아악

    usort 将从数组中取出两项并用它们调用您的 cmp 函数。因此 cmp() 将以 $a 的形式调用 array('foo' => 'bar', 'baz' => 42)$b 作为另一个 array('foo' => ..., 'baz' => ...)。然后该函数返回到 usort 哪个值更大或者它们是否相等。 usort 重复此过程,为 $a$b 传递不同的值,直到数组排序完毕。 cmp 函数将被调用多次,至少$array 中的值一样多,并且值的不同组合每次代码>$a$b.

    이 아이디어에 익숙해지려면 다음을 시도해 보세요.

    으아악

    두 항목을 비교하는 사용자 정의 방법을 정의하기만 하면 됩니다. 그게 전부입니다. 이는 다양한 가치에 적용됩니다.

    이것은 복잡한 배열일 필요는 없는 모든 값에서 작동합니다. 사용자 정의 비교를 수행하려는 경우 간단한 숫자 배열을 비교할 수도 있습니다.

    sort 참조순으로 정렬하면 유용한 정보가 반환되지 않습니다!

    배열은 제자리에 정렬되므로 어떤 항목에도 반환 값을 할당할 필요가 없습니다. $array = sort($array) 会将数组替换为 true,而不是排序后的数组。只需 sort($array); 바로 그거예요.

    맞춤 숫자 비교

    숫자 키를 기준으로 정렬하려면 baz 다음을 수행하면 됩니다.

    으아악

    수학의 힘 덕분에 < 0、0 或 >.$a 是否小于、等于或大于 $b에 따라

    0 값이 반환됩니다.

    이는 float 值不起作用,因为它们会被简化为 int 并失去精度。请改用显式 -101 반환 값에도 적용됩니다.

    객체

    객체 배열이 있는 경우에도 동일한 방식으로 작동합니다.

    으아악

    기능

    함수 호출을 포함하여 비교 기능에서 필요한 모든 작업을 수행할 수 있습니다.

    으아악

    문자열

    첫 번째 문자열 비교 버전 바로가기:

    으아악

    strcmp 完全符合 cmp 的预期,它返回 -10 1.

    우주선 운영자

    PHP 7에는 여러 유형에 걸쳐 같음/작음/보다 큼 비교를 통합하고 단순화하는 우주선 연산자가 도입되었습니다. 으아악

    여러 필드로 정렬

    주로 foo로 정렬하고 싶지만 두 요소의 foo가 동일하면 foo 排序,但如果两个元素的 foo 相等,则按 baz로 정렬하세요.

    으아악

    익숙한 분들을 위해 이는 ORDER BY foo, baz를 사용하는 SQL 쿼리와 동일합니다.
    이 매우 간결한 단축 버전키 개수에 관계없이 이러한 비교 함수를 동적으로 생성하는 방법도 참조하세요.

    수동 고정 순서로 정렬

    요소를 "foo", "bar", "baz" 와 같은 "수동 순서"로 정렬하려는 경우:

    으아악

    위의 모든 사항에 대해 PHP 5.3 이상을 사용하고 있다면(그리고 꼭 그래야 합니다), 익명 함수를 사용하여 코드를 단축하고 다른 전역 함수를 사용하지 마세요.

    으아악

    복잡한 다차원 배열을 정렬하는 간단한 방법입니다. 다시 말하지만, 두 항목 중 어느 것이 더 큰지 결정하는 방법을 PHP에 가르치세요. PHP에서 실제 정렬을 수행하게 하세요.

    또한 위의 모든 항목에 대해 오름차순과 내림차순 간에 전환하려면 $a$b 매개변수만 바꾸면 됩니다. 예:

    으아악

    다른 배열을 기반으로 한 배열 정렬

    또한 다음을 기준으로 배열을 정렬할 수 있는 멋진 기능 array_multisort도 있습니다. 또 다른 방법:

    으아악

    여기서 예상되는 결과는 다음과 같습니다.

    으아악

    array_multisort를 사용하여 거기에 가십시오:

    으아악

    PHP 5.5.0부터 array_column를 사용하여 다차원 배열에서 열을 추출하고 해당 열에서 배열을 정렬할 수 있습니다.

    으아악

    여러 열을 어느 방향으로든 정렬할 수도 있습니다.

    으아악

    PHP 7.0.0부터 객체 배열에서 속성을 추출할 수도 있습니다.


    회신하다
    0
  • 취소회신하다