이 질문은 PHP의 배열 정렬 문제에 대한 참고 자료로 작성되었습니다. 귀하의 특정 사례가 독특하고 새로운 질문을 받을 가치가 있다고 생각하기 쉽지만 대부분은 실제로 이 페이지에 있는 솔루션 중 하나를 약간 변형한 것입니다.
이 질문과 중복되어 질문이 종료된 경우 아래의 모든 질문과 크게 다른 이유를 설명할 수 있는 경우에만 질문을 다시 열어달라고 요청하세요.
PHP에서 배열을 정렬하는 방법은 무엇입니까?
PHP에서 복잡한 배열을 정렬하는 방법은 무엇입니까?
PHP에서 객체 배열을 정렬하는 방법은 무엇입니까?
기본 1차원 배열이 포함되어 있습니다. 다차원 배열 포함 객체 배열에는 다음이 포함됩니다. 다른 배열을 기반으로 한 배열 정렬
SPL 정렬 사용
안정적인 정렬
PHP의 기존 함수를 사용한 실용적인 답변은 1을 참조하고, 정렬 알고리즘(PHP 함수가 구현하고 매우 복잡한 경우에 필요할 수 있음)에 대한 학술적으로 자세한 답변은 2를 참조하세요.
P粉4764755512023-10-18 13:03:18
알겠습니다. deceze에서는 대부분의 기본 방법을 다루었습니다. 다른 유형의 정렬도 살펴보겠습니다
SplHeap
출력
으아아아SplMaxHeap
SplMaxHeap 클래스는 힙의 주요 기능을 제공하여 최대값을 맨 위에 유지합니다.
으아아아SplMinHeap
버블 정렬에 관한 Wikipedia 기사에서 발췌:
으아아아선택 정렬에 관한 Wikipedia 기사에서 발췌:
으아아아삽입 정렬에 관한 Wikipedia 기사에서 발췌:
으아아아Shellsort에 관한Wikipedia 기사에서 발췌:
으아아아빗 정렬에 관한Wikipedia 기사에서 발췌:
으아아아병합 정렬에 관한 Wikipedia 기사에서:
으아아아빠른 정렬에 관한 Wikipedia 기사에서 발췌:
으아아아정렬에 관한 Wikipedia 기사에서 발췌:
으아아아기수 정렬에 관한Wikipedia 기사에서 발췌:
으아아아P粉9523651432023-10-18 09:01:08
적용 가능한 정렬 기능:
排序
排序
分类
排序
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
에 따라
이는 float
值不起作用,因为它们会被简化为 int
并失去精度。请改用显式 -1
、0
和 1
반환 값에도 적용됩니다.
객체 배열이 있는 경우에도 동일한 방식으로 작동합니다.
으아악함수 호출을 포함하여 비교 기능에서 필요한 모든 작업을 수행할 수 있습니다.
으아악첫 번째 문자열 비교 버전 바로가기:
으아악strcmp
完全符合 cmp
的预期,它返回 -1
、0
或 1
.
PHP 7에는 여러 유형에 걸쳐 같음/작음/보다 큼 비교를 통합하고 단순화하는 우주선 연산자가 도입되었습니다. p> 으아악
주로 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부터 객체 배열에서 속성을 추출할 수도 있습니다.