> 백엔드 개발 > PHP 문제 > PHP에서 배열의 요소를 정렬하는 방법

PHP에서 배열의 요소를 정렬하는 방법

PHPz
풀어 주다: 2023-04-18 15:33:24
원래의
525명이 탐색했습니다.

PHP에서는 2차원 배열을 정렬하기 위해 내장 함수 usort()uasort()를 사용하여 정렬할 수 있습니다. 두 함수 모두 배열의 요소를 정렬할 수 있지만 구현 방식이 약간 다릅니다. usort()uasort()来实现。这两个函数都可以对数组中的元素进行排序,但具体实现方式略有不同。

usort()函数会在原数组上排序并返回布尔值,而uasort()函数则会对原数组进行排序,但保留键值对之间的关联,亦即不新建索引数组。下面我们将分别介绍这两个函数的使用方法。

usort()函数

usort()函数的第一个参数是需要排序的数组,第二个参数是一个比较函数,其实现方式是通过在需要排序的数组中交换元素位置并返回布尔值实现。

//示例数组$students
$students = array(
    array("name" => "张三", "age" => 22),
    array("name" => "李四", "age" => 20),
    array("name" => "王五", "age" => 25)
);

//比较函数cmp
function cmp($a, $b){
    if ($a["age"] == $b["age"]) {
        return 0;
    }
    return ($a["age"] < $b["age"]) ? -1 : 1;
}

//使用usort()排序
usort($students, "cmp");

//输出结果
var_dump($students);
로그인 후 복사

上面的代码中,我们首先定义了一个包含三个元素的2维数组$students,每个元素都包含"name"和"age"两个键值对。

接下来,我们定义了一个比较函数cmp,该函数通过比较两个元素在"age"键值对上的值,决定元素之间的相对顺序。 如果两个元素的"age"相等,则返回0;如果$a的"age"小于$b的"age",则返回-1,表示$a在$b的前面;否则返回1,表示$a在$b的后面。

最后,我们使用usort()函数对数组$students按照cmp函数定义的规则进行排序。输出结果可以看到数组中的元素已经按照"age"键值对从小到大排序了。

uasort()函数

uasort()函数的实现方式与usort()类似,但不同的是保留了键值对之间的关联,不新建索引数组。因此,它需要一个更复杂的比较函数,既要比较元素大小,也需要保持键值对的关联关系。

//示例数组$students
$students = array(
    "stu1" => array("name" => "张三", "age" => 22),
    "stu2" => array("name" => "李四", "age" => 20),
    "stu3" => array("name" => "王五", "age" => 25)
);

//比较函数cmp
function cmp($a, $b){
    if ($a["age"] == $b["age"]) {
        return 0;
    }
    return ($a["age"] < $b["age"]) ? -1 : 1;
}

//使用usort()排序
uasort($students, "cmp");

//输出结果
var_dump($students);
로그인 후 복사

上面的代码中,我们首先定义了一个包含三个元素的2维关联数组$students,每个元素都包含"name"和"age"两个键值对。区别在于,这里我们用字符串"stu1"、"stu2"和"stu3"作为了数组的键值,而不是前面的数字索引。

定义比较函数cmp的方式与usort()相同。不同的地方是,我们在调用uasort()函数时,传递了数组$students和比较函数cmp作为参数。该函数会根据cmp规则对数组进行排序,排序的结果保留了原有的联合键值关系。

最后,我们通过var_dump()函数输出排序结果。可以看到,输出的结果依旧是一个关联数组,但元素已经按照"age"键值对从小到大排序。

除了usort()uasort()以外,PHP还提供了一系列其他的数组排序函数,例如asort()arsort()ksort()krsort()

usort() 함수는 원래 배열을 정렬하고 부울 값을 반환하는 반면, uasort() 함수는 원래 배열을 정렬하지만 키-값 쌍을 유지합니다. . 연관, 즉 새 인덱스 배열이 생성되지 않습니다. 아래에서는 이 두 기능을 각각 사용하는 방법을 소개합니다. 🎜

usort()함수

🎜usort()함수의 첫 번째 매개변수는 정렬이 필요한 배열이고, 두 번째 매개변수는 정렬이 필요한 배열의 요소 위치를 교환하고 부울 값을 반환하여 구현되는 비교 함수입니다. 🎜rrreee🎜위 코드에서는 먼저 세 개의 요소를 포함하는 2차원 배열 $students를 정의합니다. 각 요소에는 두 개의 키-값 쌍 "name"과 "age"가 포함됩니다. 🎜🎜다음으로 "age" 키-값 쌍에서 두 요소의 값을 비교하여 요소 간의 상대적 순서를 결정하는 비교 함수 cmp를 정의합니다. 두 요소의 "age"가 동일하면 0이 반환되고, $a의 "age"가 $b의 "age"보다 작으면 -1이 반환되어 $a가 $ 앞에 있음을 나타냅니다. b 그렇지 않으면 1이 반환되어 $a가 $b 이후임을 나타냅니다. 🎜🎜마지막으로 usort() 함수를 사용하여 cmp 함수에서 정의한 규칙에 따라 $students 배열을 정렬합니다. 출력에서 배열의 요소가 "age" 키-값 쌍에 따라 작은 것부터 큰 것 순으로 정렬되었음을 알 수 있습니다. 🎜

uasort()함수

🎜uasort()함수의 구현은 usort()와 유사하지만 다른 키-값 쌍 간의 연결을 유지하고 새 인덱스 배열을 생성하지 않습니다. 따라서 요소 크기를 비교할 뿐만 아니라 키-값 쌍의 연관성을 유지하는 보다 복잡한 비교 함수가 필요합니다. 🎜rrreee🎜위 코드에서는 먼저 세 개의 요소를 포함하는 2차원 연관 배열 $students를 정의합니다. 각 요소에는 두 개의 키-값 쌍 "name"과 "age"가 포함됩니다. 차이점은 여기서는 이전 숫자 인덱스 대신 "stu1", "stu2" 및 "stu3" 문자열을 배열의 키 값으로 사용한다는 것입니다. 🎜🎜비교 함수 cmp를 정의하는 방법은 usort()와 동일합니다. 차이점은 uasort() 함수를 호출할 때 $students 배열과 비교 함수 cmp를 매개변수로 전달한다는 것입니다. 이 함수는 cmp 규칙에 따라 배열을 정렬하며, 정렬된 결과는 원래 결합 키-값 관계를 유지합니다. 🎜🎜마지막으로 var_dump() 함수를 통해 정렬 결과를 출력합니다. 보시다시피, 출력 결과는 여전히 연관 배열이지만 요소는 "age" 키-값 쌍에 따라 작은 것부터 큰 것 순으로 정렬되었습니다. 🎜🎜usort()uasort() 외에도 PHP는 asort()와 같은 일련의 다른 배열 정렬 함수도 제공합니다. , arsort(), ksort(), krsort() 등 개발자는 실제 필요에 따라 적절한 기능을 선택할 수 있습니다. 🎜

위 내용은 PHP에서 배열의 요소를 정렬하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿