Rumah > pembangunan bahagian belakang > tutorial php > Amalan pengisihan pelbagai dimensi tatasusunan PHP: daripada senario mudah kepada kompleks

Amalan pengisihan pelbagai dimensi tatasusunan PHP: daripada senario mudah kepada kompleks

WBOY
Lepaskan: 2024-04-29 21:12:02
asal
867 orang telah melayarinya

多维数组排序可分为单列排序和嵌套排序。单列排序可使用 array_multisort() 函数按列排序;嵌套排序需要递归函数遍历数组并排序。实战案例包括按产品名称排序和按销售量和价格复合排序。

Amalan pengisihan pelbagai dimensi tatasusunan PHP: daripada senario mudah kepada kompleks

PHP 数组多维排序实战:从简单到复杂场景

引言

在 PHP 中,对多维数组进行排序通常是一项复杂的任务。本教程将引导你逐步了解如何根据不同的场景进行多维数组排序,从简单的单列排序到复杂的嵌套排序。

单列排序

最简单的多维数组排序是根据单列进行排序。你可以使用 array_multisort() 函数:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

$arr = [

    ['id' => 1, 'name' => 'John Doe'],

    ['id' => 3, 'name' => 'Jane Smith'],

    ['id' => 2, 'name' => 'Bob Johnson'],

];

 

array_multisort(array_column($arr, 'id'), SORT_ASC, $arr);

 

print_r($arr);

// 输出:

// Array

// (

//     [0] => Array

//         (

//             [id] => 1

//             [name] => John Doe

//         )

//     [1] => Array

//         (

//             [id] => 2

//             [name] => Bob Johnson

//         )

//     [2] => Array

//         (

//             [id] => 3

//             [name] => Jane Smith

//         )

// )

Salin selepas log masuk

嵌套数组排序

对于嵌套数组,你需要使用递归函数来遍历数组并对其进行排序:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

function sortNestedArray($arr, $col, $order) {

    if (!is_array($arr)) {

        return $arr;

    }

 

    uasort($arr, function($a, $b) use ($col, $order) {

        if ($a[$col] == $b[$col]) {

            return 0;

        }

 

        return ($a[$col] < $b[$col]) ? -1 : 1;

    });

 

    foreach ($arr as &$item) {

        if (is_array($item)) {

            $item = sortNestedArray($item, $col, $order);

        }

    }

 

    return $arr;

}

Salin selepas log masuk

实战案例

案例 1:按产品名称对嵌套数组进行排序

1

2

3

4

5

6

7

8

9

$products = [

    ['id' => 1, 'name' => 'Apple', 'price' => 10],

    ['id' => 2, 'name' => 'Orange', 'price' => 15],

    ['id' => 3, 'name' => 'Banana', 'price' => 5],

];

 

$sortedProducts = sortNestedArray($products, 'name', SORT_ASC);

 

// ... 处理排序后的数组 ...

Salin selepas log masuk

案例 2:按销售量和价格对嵌套数组进行复合排序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

$salesData = [

    ['product' => 'Apple', 'count' => 10, 'price' => 10],

    ['product' => 'Orange', 'count' => 15, 'price' => 15],

    ['product' => 'Banana', 'count' => 5, 'price' => 5],

];

 

usort($salesData, function($a, $b) {

    if ($a['count'] == $b['count']) {

        return ($a['price'] < $b['price']) ? -1 : 1;

    }

 

    return ($a['count'] < $b['count']) ? 1 : -1;

});

 

// ... 处理排序后的数据 ...

Salin selepas log masuk

Atas ialah kandungan terperinci Amalan pengisihan pelbagai dimensi tatasusunan PHP: daripada senario mudah kepada kompleks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan