Để sắp xếp trên một cột của các giá trị, sự kết hợp của array_column[]
và array_multisort[]
là một cách hợp lý. Thử nghiệm
array_multisort[array_column[$array, 'count'], $array];
Hoặc chỉ gọi usort[]
với toán tử tàu vũ trụ để thực hiện ít lặp lại trong kịch bản này. Thử nghiệm
usort[$array, fn[$a, $b] => $a->count $b->count];
Lưu ý rằng mặc dù các giá trị đếm được đúc thành giá trị loại chuỗi trong mảng đầu vào, cả hai hàm sắp xếp sẽ sắp xếp chính xác các giá trị bằng số thay vì bảng chữ cái [đặt sai 23420
trước 420
]. Đây là một tính năng mặc định đáng tin cậy.
Ngay cả khi bạn đang khai báo cột để sắp xếp, cả hai cách tiếp cận đều cho phép biến được sử dụng mà không có bất kỳ kỹ thuật bổ sung nào.
Bản demo đaort với biến
$property = 'count';
array_multisort[array_column[$array, $property], $array];
Demo usort với biến
$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
Cả hai hàm sắp xếp gốc sửa đổi theo tham chiếu, vì vậy không cố gắng truy cập mảng được sắp xếp theo giá trị trả về của chúng.
Hướng sắp xếp mặc định của ________ 6 là tăng dần, do đó, việc sử dụng rõ ràng
usort[$array, fn[$a, $b] => $a->count $b->count];
1 giữa hai tham số mảng không có lợi. Nếu mong muốn sắp xếp giảm dần, hãy viết usort[$array, fn[$a, $b] => $a->count $b->count];
2 giữa hai mảng [là tham số thứ hai].usort[]
sẽ sắp xếp tăng dần khi thân chức năng tùy chỉnh đặt dữ liệu
usort[$array, fn[$a, $b] => $a->count $b->count];
4 ở phía bên trái của toán tử tàu vũ trụ và dữ liệu usort[$array, fn[$a, $b] => $a->count $b->count];
5 ở phía bên phải. Để sắp xếp theo hướng giảm dần, chỉ cần ghi dữ liệu usort[$array, fn[$a, $b] => $a->count $b->count];
5 ở bên trái và dữ liệu usort[$array, fn[$a, $b] => $a->count $b->count];
4 ở bên phải.Cả hai cách tiếp cận đều có khả năng nhận được nhiều quy tắc sắp xếp, nhưng vì câu hỏi này chỉ yêu cầu sắp xếp trên một cột duy nhất, hướng dẫn đó là không phù hợp ở đây.
Sẽ kém hiệu quả khi gọi một hàm [như
usort[$array, fn[$a, $b] => $a->count $b->count];
8] trên mỗi lần lặp trong khi sắp xếp. Đây không còn là thực hành tốt nhất. Cả hai đều không sử dụng so sánh hai chiều [như usort[$array, fn[$a, $b] => $a->count $b->count];
9 hoặc $property = 'count';
array_multisort[array_column[$array, $property], $array];
0] để trả về kết quả Boolean. Một so sánh ba chiều được dự kiến từ usort[]
.Để sắp xếp dữ liệu với nhiều quy tắc/cột/thuộc tính, câu trả lời này đưa ra hướng dẫn tốt.
Cải thiện bài viết
Lưu bài viết
Cho một mảng các đối tượng và tác vụ là sắp xếp mảng theo đối tượng theo các trường đã cho.
Cách tiếp cận: Hàm usort [] là một hàm sẵn có trong PHP được sử dụng để sắp xếp mảng các phần tử một cách có điều kiện với hàm so sánh nhất định. Hàm usort [] cũng có thể được sử dụng để sắp xếp một mảng các đối tượng theo trường đối tượng. Gọi hàm usort [] với đối số thứ nhất là mảng của các đối tượng và đối số thứ hai là hàm so sánh trên cơ sở so sánh giữa hai đối tượng mảng phải được thực hiện.
The usort[] function is an inbuilt function in PHP which is used to sort the array of elements conditionally with a given comparator function. The usort[] function can also be used to
sort an array of objects by object field. Call usort[] function with first argument as the array of objects and second argument as the comparator function on the basis of which comparison between two array objects has to be made.
Example:
$property = 'count';
array_multisort[array_column[$array, $property], $array];
2$property = 'count';
array_multisort[array_column[$array, $property], $array];
3 $property = 'count';
array_multisort[array_column[$array, $property], $array];
4$property = 'count';
array_multisort[array_column[$array, $property], $array];
5$property = 'count';
array_multisort[array_column[$array, $property], $array];
6$property = 'count';
array_multisort[array_column[$array, $property], $array];
7$property = 'count';
array_multisort[array_column[$array, $property], $array];
5$property = 'count';
array_multisort[array_column[$array, $property], $array];
6$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
1 $property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
2$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
3$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
4$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
6 $property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
2$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
8$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
4$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0Original object array: Array [ [0] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] [1] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [2] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] ] Sorted object array: Array [ [0] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [1] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] [2] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] ]1
$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
2Original object array: Array [ [0] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] [1] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [2] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] ] Sorted object array: Array [ [0] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [1] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] [2] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] ]3
$property = 'count';
array_multisort[array_column[$array, $property], $array];
7Original object array: Array [ [0] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] [1] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [2] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] ] Sorted object array: Array [ [0] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [1] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] [2] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] ]5
$property = 'count';
array_multisort[array_column[$array, $property], $array];
7$property = 'count';
array_multisort[array_column[$array, $property], $array];
5$property = 'count';
array_multisort[array_column[$array, $property], $array];
6$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
1 $property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
2array_column[]
22$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
6 $property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
2array_column[]
7$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
4$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0____41 $property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
2array_multisort[]
2$property = 'count';
array_multisort[array_column[$array, $property], $array];
7Original object array: Array [ [0] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] [1] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [2] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] ] Sorted object array: Array [ [0] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [1] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] [2] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] ]5
$property = 'count';
array_multisort[array_column[$array, $property], $array];
7$property = 'count';
array_multisort[array_column[$array, $property], $array];
5$property = 'count';
array_multisort[array_column[$array, $property], $array];
6$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
1 $property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
2usort[]
1$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
4$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
6 $property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
2usort[]
6$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
4$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0____41 $property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
223420
1$property = 'count';
array_multisort[array_column[$array, $property], $array];
723420
323420
4
23420
5 23420
6
$property = 'count';
array_multisort[array_column[$array, $property], $array];
723420
8 23420
9array_multisort[array_column[$array, 'count'], $array];
0420
1420
0$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
420
4$property = 'count';
array_multisort[array_column[$array, $property], $array];
7420
6 420
7 420
8420
9usort[$array, fn[$a, $b] => $a->count $b->count];
00$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0usort[$array, fn[$a, $b] => $a->count $b->count];
02usort[$array, fn[$a, $b] => $a->count $b->count];
03420
9usort[$array, fn[$a, $b] => $a->count $b->count];
05$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
6usort[$array, fn[$a, $b] => $a->count $b->count];
07$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0usort[$array, fn[$a, $b] => $a->count $b->count];
02usort[$array, fn[$a, $b] => $a->count $b->count];
10420
9usort[$array, fn[$a, $b] => $a->count $b->count];
05$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
1usort[$array, fn[$a, $b] => $a->count $b->count];
07$property = 'count';
usort[$array, fn[$a, $b] => $a->$property $b->$property];
0usort[$array, fn[$a, $b] => $a->count $b->count];
02usort[$array, fn[$a, $b] => $a->count $b->count];
17420
9usort[$array, fn[$a, $b] => $a->count $b->count];
05Original object array: Array [ [0] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] [1] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [2] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] ] Sorted object array: Array [ [0] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [1] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] [2] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] ]1
usort[$array, fn[$a, $b] => $a->count $b->count];
07$property = 'count';
array_multisort[array_column[$array, $property], $array];
7usort[$array, fn[$a, $b] => $a->count $b->count];
23usort[$array, fn[$a, $b] => $a->count $b->count];
23420
7
usort[$array, fn[$a, $b] => $a->count $b->count];
26420
9usort[$array, fn[$a, $b] => $a->count $b->count];
00$property = 'count';
array_multisort[array_column[$array, $property], $array];
7usort[$array, fn[$a, $b] => $a->count $b->count];
30 $property = 'count';
array_multisort[array_column[$array, $property], $array];
4usort[$array, fn[$a, $b] => $a->count $b->count];
32 420
8420
923420
4$property = 'count';
array_multisort[array_column[$array, $property], $array];
7usort[$array, fn[$a, $b] => $a->count $b->count];
37 usort[$array, fn[$a, $b] => $a->count $b->count];
30420
4usort[$array, fn[$a, $b] => $a->count $b->count];
23420
7
usort[$array, fn[$a, $b] => $a->count $b->count];
42usort[$array, fn[$a, $b] => $a->count $b->count];
43420
0usort[$array, fn[$a, $b] => $a->count $b->count];
45usort[$array, fn[$a, $b] => $a->count $b->count];
00$property = 'count';
array_multisort[array_column[$array, $property], $array];
7usort[$array, fn[$a, $b] => $a->count $b->count];
37 usort[$array, fn[$a, $b] => $a->count $b->count];
43usort[$array, fn[$a, $b] => $a->count $b->count];
50usort[$array, fn[$a, $b] => $a->count $b->count];
45usort[$array, fn[$a, $b] => $a->count $b->count];
52usort[$array, fn[$a, $b] => $a->count $b->count];
23usort[$array, fn[$a, $b] => $a->count $b->count];
54 $property = 'count';
array_multisort[array_column[$array, $property], $array];
4usort[$array, fn[$a, $b] => $a->count $b->count];
56$property = 'count';
array_multisort[array_column[$array, $property], $array];
6usort[$array, fn[$a, $b] => $a->count $b->count];
58420
0$property = 'count';
array_multisort[array_column[$array, $property], $array];
323420
4usort[$array, fn[$a, $b] => $a->count $b->count];
62$property = 'count';
array_multisort[array_column[$array, $property], $array];
6usort[$array, fn[$a, $b] => $a->count $b->count];
6423420
4usort[$array, fn[$a, $b] => $a->count $b->count];
66usort[$array, fn[$a, $b] => $a->count $b->count];
5423420
4usort[$array, fn[$a, $b] => $a->count $b->count];
69usort[$array, fn[$a, $b] => $a->count $b->count];
54420
0usort[$array, fn[$a, $b] => $a->count $b->count];
7223420
4usort[$array, fn[$a, $b] => $a->count $b->count];
62$property = 'count';
array_multisort[array_column[$array, $property], $array];
6usort[$array, fn[$a, $b] => $a->count $b->count];
7623420
4usort[$array, fn[$a, $b] => $a->count $b->count];
66usort[$array, fn[$a, $b] => $a->count $b->count];
5423420
4usort[$array, fn[$a, $b] => $a->count $b->count];
81Output:
Original object array: Array [ [0] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] [1] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [2] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] ] Sorted object array: Array [ [0] => geekSchool Object [ [score] => 50 [name] => Tanya [subject] => Advanced Algorithms ] [1] => geekSchool Object [ [score] => 75 [name] => Jack [subject] => Distributed Computing ] [2] => geekSchool Object [ [score] => 100 [name] => Sam [subject] => Data Structures ] ]