Hướng dẫn how to sort array of objects in php? - cách sắp xếp mảng đối tượng trong php?

Để 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()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);
0
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
        )

)
1
$property = 'count';
usort($array, fn($a, $b) => $a->$property <=> $b->$property);
2
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
        )

)
3

$property = 'count';
array_multisort(array_column($array, $property), $array);
7
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
        )

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

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

$property = 'count';
array_multisort(array_column($array, $property), $array);
7234203

234204

234205 234206

$property = 'count';
array_multisort(array_column($array, $property), $array);
7234208 234209
array_multisort(array_column($array, 'count'), $array);
042014200
$property = 'count';
usort($array, fn($a, $b) => $a->$property <=> $b->$property);
4204

$property = 'count';
array_multisort(array_column($array, $property), $array);
74206 4207 42084209
usort($array, fn($a, $b) => $a->count <=> $b->count);
00

$property = 'count';
usort($array, fn($a, $b) => $a->$property <=> $b->$property);
0
usort($array, fn($a, $b) => $a->count <=> $b->count);
02
usort($array, fn($a, $b) => $a->count <=> $b->count);
034209
usort($array, fn($a, $b) => $a->count <=> $b->count);
05
$property = 'count';
usort($array, fn($a, $b) => $a->$property <=> $b->$property);
6
usort($array, fn($a, $b) => $a->count <=> $b->count);
07

$property = 'count';
usort($array, fn($a, $b) => $a->$property <=> $b->$property);
0
usort($array, fn($a, $b) => $a->count <=> $b->count);
02
usort($array, fn($a, $b) => $a->count <=> $b->count);
104209
usort($array, fn($a, $b) => $a->count <=> $b->count);
05
$property = 'count';
usort($array, fn($a, $b) => $a->$property <=> $b->$property);
1
usort($array, fn($a, $b) => $a->count <=> $b->count);
07

$property = 'count';
usort($array, fn($a, $b) => $a->$property <=> $b->$property);
0
usort($array, fn($a, $b) => $a->count <=> $b->count);
02
usort($array, fn($a, $b) => $a->count <=> $b->count);
174209
usort($array, fn($a, $b) => $a->count <=> $b->count);
05
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
        )

)
1
usort($array, fn($a, $b) => $a->count <=> $b->count);
07

$property = 'count';
array_multisort(array_column($array, $property), $array);
7
usort($array, fn($a, $b) => $a->count <=> $b->count);
23

usort($array, fn($a, $b) => $a->count <=> $b->count);
23

4207

usort($array, fn($a, $b) => $a->count <=> $b->count);
264209
usort($array, fn($a, $b) => $a->count <=> $b->count);
00

$property = 'count';
array_multisort(array_column($array, $property), $array);
7
usort($array, fn($a, $b) => $a->count <=> $b->count);
30
$property = 'count';
array_multisort(array_column($array, $property), $array);
4
usort($array, fn($a, $b) => $a->count <=> $b->count);
32 42084209234204

$property = 'count';
array_multisort(array_column($array, $property), $array);
7
usort($array, fn($a, $b) => $a->count <=> $b->count);
37
usort($array, fn($a, $b) => $a->count <=> $b->count);
304204

usort($array, fn($a, $b) => $a->count <=> $b->count);
23

4207

usort($array, fn($a, $b) => $a->count <=> $b->count);
42
usort($array, fn($a, $b) => $a->count <=> $b->count);
434200
usort($array, fn($a, $b) => $a->count <=> $b->count);
45
usort($array, fn($a, $b) => $a->count <=> $b->count);
00

$property = 'count';
array_multisort(array_column($array, $property), $array);
7
usort($array, fn($a, $b) => $a->count <=> $b->count);
37
usort($array, fn($a, $b) => $a->count <=> $b->count);
43
usort($array, fn($a, $b) => $a->count <=> $b->count);
50
usort($array, fn($a, $b) => $a->count <=> $b->count);
45
usort($array, fn($a, $b) => $a->count <=> $b->count);
52

usort($array, fn($a, $b) => $a->count <=> $b->count);
23

usort($array, fn($a, $b) => $a->count <=> $b->count);
54
$property = 'count';
array_multisort(array_column($array, $property), $array);
4
usort($array, fn($a, $b) => $a->count <=> $b->count);
56
$property = 'count';
array_multisort(array_column($array, $property), $array);
6
usort($array, fn($a, $b) => $a->count <=> $b->count);
584200
$property = 'count';
array_multisort(array_column($array, $property), $array);
3234204

usort($array, fn($a, $b) => $a->count <=> $b->count);
62
$property = 'count';
array_multisort(array_column($array, $property), $array);
6
usort($array, fn($a, $b) => $a->count <=> $b->count);
64234204

usort($array, fn($a, $b) => $a->count <=> $b->count);
66
usort($array, fn($a, $b) => $a->count <=> $b->count);
54234204

usort($array, fn($a, $b) => $a->count <=> $b->count);
69
usort($array, fn($a, $b) => $a->count <=> $b->count);
544200
usort($array, fn($a, $b) => $a->count <=> $b->count);
72234204

usort($array, fn($a, $b) => $a->count <=> $b->count);
62
$property = 'count';
array_multisort(array_column($array, $property), $array);
6
usort($array, fn($a, $b) => $a->count <=> $b->count);
76234204

usort($array, fn($a, $b) => $a->count <=> $b->count);
66
usort($array, fn($a, $b) => $a->count <=> $b->count);
54234204

usort($array, fn($a, $b) => $a->count <=> $b->count);
81

Output:

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
        )

)